Python3 - 既存の抽象クラスから抽象サブクラスを定義するにはどうすればいいですか? 質問する

Python3 - 既存の抽象クラスから抽象サブクラスを定義するにはどうすればいいですか? 質問する

最初に次の抽象クラスを定義しました。

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ため、 はまだ抽象的です。そのサブクラスのインスタンスを作成することはできません。barabstractmethod

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

おすすめ記事