最初に次の抽象クラスを定義しました。
from abc import ABC, abstractmethod
class Primitive(ABC):
ここで、Primitive から継承する別の抽象クラスを作成します。
class InstrumentName(Primitive)
最終的には次の 2 つの具象クラスを作成したいので、このクラスを抽象化する必要があります。
class CurrencyInstrumentName(InstrumentName)
class MetalInstrumentName(InstrumentName)
私はドキュメントを読み、SOを検索しましたが、それらは主に抽象クラスから具象クラスをサブクラス化すること、またはPythonが抽象化をどのように処理するかについて議論することに関するものでした。
ベストアンサー1
サブクラス化するだけで、特別なことをする必要はありません。
クラスは、実装内にオブジェクトがabstractmethod
残っていない場合にのみ具体化されます。abstractproperty
これを説明してみましょう:
from abc import ABC, abstractmethod
class Primitive(ABC):
@abstractmethod
def foo(self):
pass
@abstractmethod
def bar(self):
pass
class InstrumentName(Primitive):
def foo(self):
return 'Foo implementation'
ここでは、は のままになっているInstrumentName
ため、 はまだ抽象的です。そのサブクラスのインスタンスを作成することはできません。bar
abstractmethod
>>> InstrumentName()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: Can't instantiate abstract class InstrumentName with abstract methods bar
@abstractmethod
サブクラスでは、必要に応じてメソッドを追加することもできます@abstractproperty
。
フードの下、すべてのサブクラスこれを強制するメタクラスを継承しABCMeta
、クラスに属性が残っているか@abstractmethod
どうかを単純にチェックします。@abstractproperty