Форум сайта python.su
Описать метод отдельно обычно можно так:
#file2.py
def show(self, string):
print string
#file1.py
from file2 import show
class A:
show=show
a=A()
a.show('hello')
class shape:
def show(self):
print 'shape'
@staticmethod
def makeRec():
rec=Rectangle()
return rec
class Rectangle(shape):
def show(self):
shape.show(self)
print 'rectangle'
rectangle=shape.makeRec()
rectangle.show()
#shape.py
from show import show
from makeRec import makeRec
class shape:
show=show
staticmethod(makeRec)
#show.py
def show(self):
print 'shape'
#makeRec.py
from rectangle import Rectangle
def makeRec():
rec=Rectangle()
return rec
#rectangle.py
from shape import shape
from showrec import show
class Rectangle(shape):
show=show
#showrec.py
from shape import shape
def show(self):
shape.show(self)
print 'rectangle'
Офлайн
Кажется, вам нужно что-то совсем другое, отличное от разнесения кода по отдельным классам.
Расскажите, что?
Пример на простой предметной области, изложенный обыкновенным русским языком - сильно помогает пониманию.
Офлайн
можно разорвать цикл., а связи построить при запуске программы.
например для класса Rectangle наследование прикрутить при запуске программы или в метод makeRec вызов rectangle() при запуске засунуть.
но это извращение.
Офлайн
Андрей Светлов, Мне нужно описать с помощью ООП геометрические фигуры. Второй пример кода, с моей точки зрения очень хорош.
В компилируемых языках есть понятие “единица компиляции”, по суть это один файл исходного кода. Если методы очень большие их лучше описывать в отдельных файлах. Это удобно по множеству причин. Подобный код в с++ я без проблем могу разнести в разные файлы, использую файлы заголовков.
В python'е не получается. Может я не правильно проектирую методы?
Как можно разнести по отдельным файлам сущности такого кода? (in - функция ввода out - функция вывода)
# -*- coding: utf-8 -*-
#from shape_in import In
from shape_out import Out
from circle_in import In as InC
from circle_out import Out as OutC
from rectangle_in import In as InR
from rectangle_out import Out as OutR
colorDict={'1':'красный', '2': 'зелёный', '3': 'синий'}
existShapes=[1,2]
class Shape():
def __init__(self):
self.key=''
self.color=''
self.oblect=None
Out=Out
@staticmethod
def In(inputStr):
ParamsList=inputStr.split(' ')
i=int(ParamsList[0])
if i not in existShapes:
return False
if i==1:
# self.key='circle'
shape=Circle()
shape.InData(' '.join(ParamsList[2:]))
elif i==2:
# shape.key='rectangle'
shape=Rectangle()
shape.InData(' '.join(ParamsList[2:]))
if ParamsList[1] in colorDict.keys():
shape.color=colorDict[ParamsList[1]]
return shape
def InData(self):
pass
class Circle(Shape):
def __init__(self,x=0,y=0,radius=0):
self.x=x
self.y=y
self.radius=radius
InData=InC
Out=OutC
class Rectangle(Shape):
def __init__(self,x1=0,y1=0,x2=1,y2=1):
self.x1=x1
self.y1=y1
self.x2=x2
self.y2=y2
InData=InR
# Out=OutR
def Out(self,outstream):
Shape.Out(self,outstream)
# super( Shape, self ).Out( *args )
outstream.write("Это примоугольник: x1 = "+str(self.x1)+' ,y1 = '+str(self.y1)+' ,x2 = '+str(self.x2)+' ,y2 = '+str(self.y2)+'.\n')
Офлайн