Шаблон дизайна интерфейса для разных классов - PullRequest
2 голосов
/ 15 мая 2019

Я ищу правильный шаблон проектирования для реализации интерфейса в настройках класса.

Моя структура файла выглядит следующим образом:

  1. модели: , которая содержит различныемодели, написанные в классах, скажем Model, subModelA, subModelB, subsubModelC и т. д.
  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

Я обследовал некоторыеКаталоги шаблонов дизайна, как указано в здесь , и стратегия, кажется, правильный шаблон.Но пример с ребенком не решает мою проблему, так как я надеюсь использовать структуру классов в файле модели.

Я надеюсь, что кто-то может дать мне более полноценный пример в таком случае.Заранее спасибо.

1 Ответ

0 голосов
/ 15 мая 2019

Таким образом, вы можете разделить модели и калькуляторы следующим образом:

# 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
...