【Python3.x】FutureWarning::__subclasshook__()メソッドの使い方
__subclasshook__メソッドの使い方について、初心者にもわかりやすく解説します。
基本的な使い方
__subclasshook__メソッドは、Pythonにおいて、継承関係がなくても、あるクラスを特定のクラスの「サブクラスである」と判断できるように、判定ルールをカスタマイズするために使用される特殊なクラスメソッドです。通常、issubclass() 関数などでクラスの継承関係をチェックする際、明示的な継承が求められますが、このメソッドを定義することで、例えば、特定のメソッドを持っているなど、事前に決められた条件を満たすクラスを、たとえ直接継承していなくても、あたかもその親クラスを継承しているかのように扱えるようにします。
FutureWarning クラスは、将来のPythonバージョンで非推奨になる可能性のある機能や変更に対して開発者に警告を出すための組み込みクラスです。FutureWarning クラスにこの __subclasshook__ メソッドが定義されているのは、Pythonの内部システムが警告クラスの型判定をより柔軟に行うため、あるいは特定の規約に従うクラスを FutureWarning の一種として扱うことを可能にするための仕組みとして定義されています。FutureWarning 自体は抽象基底クラスではありませんが、その型チェックや分類の振る舞いを、開発者が直接継承を記述しなくても調整できるようにする目的で存在します。
システムエンジニアの皆さんがこのメソッドを直接操作する場面はほとんどありませんが、Pythonのクラスシステムが持つ高度な柔軟性を示す一例と言えます。主に、isinstance() や issubclass() の挙動を拡張し、明示的な継承なしに「仮想的なサブクラス関係」を構築するために利用されます。
構文(syntax)
1@classmethod 2def __subclasshook__(cls, C): 3 return NotImplemented
引数(parameters)
cls: type, subclass: type
- cls: type: 比較対象となるクラス(自身)
- subclass: type: チェック対象のサブクラス
戻り値(return)
戻り値なし
戻り値はありません