python - 不同类的接口设计模式
问题描述
我正在寻找正确的设计模式来在类设置中实现接口。
我的文件结构如下:
- 模型:包含用类编写的不同模型,例如
Model
、subModelA
、subModelB
等subsubModelC
。 - 计算器:其中包含每个型号的不同计算器工具。请注意,计算器将需要导入模型属性进行计算。
我的问题是我应该如何构建我的计算器文件以遵循模型的结构。
我最初的尝试是ABC
为我编写一个类calculator
,然后为模型subModel
中的每个类编写一个相应的subCalculator子类来实现。然而,这似乎并没有充分利用model中规定的类结构。
我尝试的一些小例子:
# in model.py
class model(object):
def __init__(self,attr1):
self.attr1 = attr1
class submodel(model):
def __init__(self, attr1, attr2):
super().__init__(attr1)
self.attr2
# in calculator.py
from model import model
class calculator(abc.ABC):
@staticmethod
@abc.abstractmethod
def calculate(model):
return model.attr1 ** 2
class subcalculator(calculator):
def calculate(model):
y = super(subcalculator, subcalculator).calculate(model)
return y + model.attr2 ** 3
我调查了此处列出的一些设计模式目录,策略似乎是正确的模式。但是那里的婴儿示例并没有解决我的问题,因为我希望在模型文件中使用类结构。
在这种情况下,我希望有人能给我一个更完整的例子。提前致谢。
解决方案
所以你可以像这样分离模型和计算器:
# in model.py
import calculator as cal
class model(object):
def __init__(self,attr1):
self.attr1 = attr1
def calculate(self):
return cal.defaultCalc(self)
class submodel(model):
def __init__(self, attr1, attr2):
super().__init__(attr1)
self.attr2
def calculate(self):
return cal.subCalc(self)
# in calculator.py
def defaultCalc(model):
return model.attr1 ** 2
def subCalc(model):
return defaultCalc(model) + model.attr2 ** 3
推荐阅读
- python - Python将数据加载到MySQL中:AttributeError:'tuple'对象没有属性'encode'
- php - 使用 PHP 发布 Instagram 照片
- html - 将图像放入 Bootstrap SVG
- telegram - 如何使用 python 将视频发送到电报频道?
- r - 计算数据框行中出现非精确值的频率
- python - 如何使用 Python 正确编辑 .dll 文件文本值
- python - 错误:在位置 0 没有可重复的内容 pd.read_csv()
- python - 打印第二个列表中的所有数字,然后打印另一个列表中的下一个数字
- python - 仅当包含买入或卖出时才单击多值选项卡式按钮
- r - 从R中的列制作列表