【Python3.x】ReferenceError::__subclasshook__()メソッドの使い方
__subclasshook__メソッドの使い方について、初心者にもわかりやすく解説します。
基本的な使い方
__subclasshook__メソッドは、あるクラスが別のクラスの「仮想的なサブクラス」であるかどうかをPythonの内部で判定する際に利用される、特別なロジックを実行するメソッドです。主に「抽象基底クラス(ABC)」と呼ばれる種類のクラスで利用され、明示的に継承関係がなくても、特定のメソッドやプロパティが実装されていれば、そのクラスを「仮想的なサブクラス」として認識させたい場合にその判定ロジックを提供します。
今回対象となるReferenceErrorクラスは、存在しないローカル変数やグローバル変数にアクセスしようとした際に発生するエラーを示す、Pythonの標準的な組み込み例外の一つです。このReferenceErrorクラスにも__subclasshook__メソッドは存在しますが、通常、このような具体的な例外クラスにおいて、このメソッドが特別なサブクラス判定ロジックを持つことはありません。もし、__subclasshook__がオーバーライドされていなければ、そのクラスはNotImplementedを返します。これは、「このクラスは独自のサブクラス判定ルールを持たないので、Pythonの標準的な継承ルールに基づいて判断してください」という意思表示になります。
システムエンジニアを目指す初心者の方々が、ReferenceErrorのような具体的な例外クラスでこの__subclasshook__メソッドを直接利用したり、その動作をカスタマイズしたりする機会はほとんどありません。このメソッドは、Pythonにおけるクラスの高度な設計パターンや抽象化の仕組みを理解する上で役立つ概念の一つとして認識しておくと良いでしょう。
構文(syntax)
1class ReferenceError(Exception): 2 @classmethod 3 def __subclasshook__(cls, C): 4 return NotImplemented
引数(parameters)
cls: type, subclass: type
- cls: type: このメソッドが属するクラス自身
- subclass: type: 検査対象のサブクラス
戻り値(return)
戻り値なし
戻り値はありません