Андрей Светлов, Мне нужно описать с помощью ООП геометрические фигуры. Второй пример кода, с моей точки зрения очень хорош.
В компилируемых языках есть понятие “единица компиляции”, по суть это один файл исходного кода. Если методы очень большие их лучше описывать в отдельных файлах. Это удобно по множеству причин. Подобный код в с++ я без проблем могу разнести в разные файлы, использую файлы заголовков.
В 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')