【Python3.x】RuntimeError::__subclasshook__()メソッドの使い方
__subclasshook__メソッドの使い方について、初心者にもわかりやすく解説します。
作成日: 更新日:
基本的な使い方
__subclasshook__メソッドは、あるクラスが、呼び出し元のクラスのサブクラスであるかを判断するための特別なフック処理を実行するメソッドです。このメソッドは、主に抽象基底クラス(ABC)の文脈で利用され、クラスが明示的にABCを継承していなくても、あるいはregister()メソッドで登録されていなくても、特定の条件を満たしていれば暗黙的にサブクラスと見なすためのロジックを定義します。
このメソッドは、isinstance()やissubclass()といったPythonの組み込み関数が型の関係性をチェックする際に呼び出されます。__subclasshook__は、引数として渡されたクラスに対して、呼び出し元のクラス(ここではRuntimeError)が定義するサブクラスとしての要件を満たしているかを確認し、その結果としてTrue、False、またはNotImplementedのいずれかを返します。
RuntimeErrorのような標準の例外クラスは、一般的に抽象基底クラスではありません。そのため、RuntimeError自身がこのメソッドを独自に実装することはありません。しかし、すべてのPythonクラスが継承するobjectクラスには、デフォルトの__subclasshook__が実装されており、これは常にNotImplementedを返します。このため、RuntimeErrorのような具体的なクラスでは、このメソッドがサブクラス判定に影響を与えることはありません。
構文(syntax)
1class CustomRuntimeError(RuntimeError): 2 @classmethod 3 def __subclasshook__(cls, C): 4 return NotImplemented
引数(parameters)
引数なし
引数はありません
戻り値(return)
戻り値なし
戻り値はありません