Webエンジニア向けプログラミング解説動画をYouTubeで配信中!
▶ チャンネル登録はこちら

【Python3.x】__class__::__subclasscheck__()メソッドの使い方

__subclasscheck__メソッドの使い方について、初心者にもわかりやすく解説します。

作成日: 更新日:

基本的な使い方

__subclasscheck__メソッドは、あるクラスが別のクラスのサブクラスであるかどうかを判定する際に実行されるメソッドです。このメソッドは、Pythonの型システムにおいて、クラス間の継承関係やインターフェースの実装状況を確認するために重要な役割を果たしています。

具体的には、Pythonの組み込み関数であるissubclass()が呼び出された際に、内部でこの__subclasscheck__メソッドが利用されます。例えば、issubclass(子クラス, 親クラス)という形でissubclass関数を使用すると、Pythonは内部的に親クラス.__subclasscheck__(子クラス)を呼び出し、子クラスが親クラスの継承ツリーの中に存在するかどうかを調べます。

通常、このメソッドをプログラマが直接呼び出すことは稀です。しかし、特定のカスタムクラスにおいて、Pythonの標準的な継承ルールとは異なる独自のロジックに基づいて「サブクラスである」と判定させたい場合に、この__subclasscheck__メソッドをオーバーライド(上書き)して、その挙動をカスタマイズすることができます。

例えば、抽象基底クラス(ABC)を定義する際に、特定のメソッド群を実装していれば、たとえ明示的に継承していなくても「その抽象基底クラスのサブクラスである」とみなす、といった柔軟な判定ロジックを実装するために活用されます。これにより、Pythonのクラス階層におけるサブクラス判定に高度な制御をもたらし、より柔軟な型チェックを実現することが可能になります。

構文(syntax)

1class CustomMetaclass(type):
2    def __subclasscheck__(cls, subclass_candidate):
3        # 'cls' represents the class whose __subclasscheck__ method is being invoked.
4        # 'subclass_candidate' represents the class that is being checked for subclass status.
5        # This method must return a boolean value (True or False).
6
7        # Add custom logic here to determine if 'subclass_candidate' should be considered a subclass of 'cls'.
8        # For example, to allow any class with a specific attribute to be a "subclass":
9        # if hasattr(subclass_candidate, '__my_custom_marker__'):
10        #     return True
11
12        # Call the superclass's __subclasscheck__ method to maintain standard inheritance checks.
13        return super().__subclasscheck__(cls, subclass_candidate)

引数(parameters)

self: type, subclass: type, /

  • subclass: type: 判定対象となるサブクラス
  • self: type: 判定対象となるクラス

戻り値(return)

bool

__subclasscheck__ メソッドは、指定されたクラスがこのクラスのサブクラスであるかどうかに応じて、True または False を返します。

関連コンテンツ

関連プログラミング言語