Я хотел бы спросить, есть ли способ реализовать интерфейсный метод внутри класса без создания экземпляров или даже больше, если это вообще плохая практика?Если это так, каков будет правильный способ реализации сложного метода интерфейса?
Вот прототип моего кода:
class calculator(abc.ABC):
@abc.abstractmethod
def calculate(self):
"start model"
class subcalculator(calculator):
def calculate(self):
return model.attr2 ** 3
def recalculate(self):
z = calculate(self)
return z ** 2
Однако этот отчет calculate()
не определяется, когдазапустите subcalculator.recalculate
, так как он не создан.
Поскольку я просто пишу интерфейсные классы для своей модели, я полагаю, что написание инициации не является хорошей идеей. (Или это так?) Что мне делать в таком случаеcase?
Редактировать: Согласно ответу @chepner, я также нашел какой-то хакерский способ решения этой проблемы, и я не уверен, что это правильная практика:
@classmethod
def recalculate(cls, self):
z = cls.calculate(self)
return z ** 2
Также стоит упомянуть объектную / модельную часть структуры:
#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 = attr2
Поэтому я надеюсь написать calculator
в качестве класса интерфейса, который может взаимодействовать с model
и т. Д.