不同类的界面设计模式

时间:2019-05-15 10:06:43

标签: python design-patterns interface class-method

我正在寻求正确的设计模式以在类设置中实现接口。

我的文件结构如下:

  1. 模型::其中包含用类编写的不同模型,例如ModelsubModelAsubModelBsubsubModelC等。
  2. 计算器::每种型号包含不同的计算器工具。 请注意,计算器将需要导入模型属性以进行计算。

我的问题是我应该如何构造计算器文件以遵循模型的结构。

我最初的尝试是为我的ABC写一个calculator类,然后为模型中的每个subModel类写一个各自的 subCalculator 子类来实施。但是,这似乎并未完全利用模型中规定的类结构。

我尝试的一些婴儿例子:

# 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

我已经调查了here中列出的一些设计模式目录,而策略似乎是正确的模式。但是那里的婴儿示例并没有解决我的问题,因为我希望在模型文件中使用类结构。

在这种情况下,我希望有人能给我一个更完整的例子。预先感谢。

1 个答案:

答案 0 :(得分:0)

因此您可以像这样将模型和计算器分开:

# 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