インスタンス化せずにクラス内にインターフェイスメソッドを実装する方法があるかどうか、またはそれが完全に悪い習慣である場合はさらに多くの方法があるかどうかを尋ねたいと思います。もしそうなら、複雑なインターフェースメソッドを実装する正しい方法は何でしょうか?
これが私のコードのプロトタイプです:
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
インスタンス化されていないため、実行時には定義されません。
モデルのインターフェイスクラスを作成しているだけなので、開始を作成するのは良い考えではないと思います(またはそうですか?)そのような場合はどうすればよいですか?
編集: @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
などと相互作用できるインターフェースクラスとして書くことです。
calculate
は、インスタンスを作成したかどうかに関係なくメソッドであり、そのように参照する必要があります。
class subcalculator(calculator):
def calculate(self):
return model.attr2 ** 3
def recalculate(self):
z = subcalculator.calculate(self)
return z ** 2
もちろん、継承モデルcalculate
に、呼び出す必要のあるメソッドを正確に決定させることをお勧めします。
def recalculate(self):
z = self.calculate()
return z ** 2
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加