今日はPythonのissubclass()メソッドに関するチュートリアルをお届けします。
では、さっそくこのトピックに入りましょう。
Python issubclass() とは何ですか?
Python の issubclass()
メソッドは、渡されたクラスが指定された classinfo
(クラスまたはクラスオブジェクトのタプル) のサブクラスであるかどうかをチェックする組み込みメソッドです。
クラスが classinfo のサブクラス (直接、間接、仮想) である場合には、 True
を返します。
そうでない場合は False
を返します。
それ以外の場合は、例外 TypeError
が発生します。
issubclass ( class , classinfo)
|
classは、
classinfo` のサブクラスであるかどうかを確認するためのクラス名です。
もし、classinfoがクラスのタプルであれば、この関数はその中に存在するクラスそれぞれに対して同じチェックを行う。
さて、 issubclass()
が何をするのか基本的なことがわかったところで、より深く理解するためにいくつかの例を見てみましょう。
この記事もチェック:Pythonのmapメソッドの使い方|ラムダ関数や引数が複数の場合の使い方も解説
Python の issubclass() メソッドを使用する
このセクションでは、Python の issubclass()
メソッドをどのように使うかを説明します。
クラス名として classinfo
を渡す場合と、クラスオブジェクトのタプルを渡す場合の両方についてです。
1. Python issubclass() インヘリタンス
継承について話すとき、親クラスと子クラスのコンセプトは非常に重要です。
親クラスを継承した子は、親クラスのプロパティを継承・拡張します。
このとき、子は親クラスのサブクラスとみなされる。
したがって、クラスの継承に関する情報を得たいときには issubclass()
メソッドが便利になります。
あるいは、他のクラスから継承しているかどうかをチェックします。
では、例を挙げてみましょう。
class Animals:
pass
class Humans(Animals):
pass
class Men(Humans):
pass
class Women(Humans):
pass
print ( "issubclass(Women, Humans) :" , issubclass (Women, Humans))
print ( "issubclass(Men, Humans) :" , issubclass (Men, Humans))
print ( "issubclass(Women, Men) :" , issubclass (Women, Men)) #both are child of the same Humans Class
print ( "issubclass(Humans, Animals) :" , issubclass (Humans, Animals))
print ( "issubclass(Animals, Humans) :" , issubclass (Animals, Humans)) #not the opposite
print ( "issubclass(Women, Animals) :" , issubclass (Women, Animals)) #multi-level inheritance
print ( "issubclass(Animals, object) :" , issubclass (Animals, object )) #object is the baseclass of all classes
|
出力してみましょう。
class Animals:
pass
class Humans(Animals):
pass
class Men(Humans):
pass
class Women(Humans):
pass
print ( "issubclass(Men, (str, list, tuple)) :" , issubclass (Men, ( str , list , tuple )))
print ( "issubclass(Men, (str, list, Humans)) :" , issubclass (Men, ( str , list , Humans)))
print ( "issubclass(Women, (str, list, Women)) :" , issubclass (Women, ( str , dict , Women)))
#A class is a subclass of itself in Python |
ここで、Animals
は親クラスで、子クラスはHumans
です。
そして、 Humans
クラスから再び Men
と Women
という2つのクラスが継承されます(多階層継承)。
したがって、 Men
と Women
の両クラスは Humans
と Animals
のサブクラスとなります。
そして、Humans
は Animals
のサブクラスです。
これで、上位6つの結果が説明できます。
さらに、最後のケースでは、True
となります。
これは、Pythonのすべてのクラスは object
クラスのサブクラスであるという事実のためです。
2. Python issubclass() クラスのタプルで考える
では、classinfo
をクラスのタプルとして考えてみましょう。
以下の例をよく見てください。

結果は以下の通りです。

ここでも同じように継承の例を取りました。
先に述べたように、今回は classinfo
がクラスオブジェクトのタプルとして渡されます。
この場合、この関数は渡されたクラスが classinfo タプル内のクラスオブジェクトのどれかのサブクラスであるかどうかをチェックします。
最初の結果では、 Men
は明らかに str, list, tuple のどのクラスのサブクラスにもなっていない。
そのため、False
が返されます。
次のケースでも、Menはstrやlistのサブクラスではなく、Humansのサブクラスです。
従って、結果は「真」です。
最後に、Women
はそれ自身のサブクラスであるため、Trueが得られます。
これは、Pythonではすべてのクラスはそれ自身のサブクラスであるという事実によるものです。
まとめ
というわけで、今日はここまでです。
Pythonの issubclass()
メソッドについて学びました。
さらに質問があれば、下のコメント欄に書いてください。
参考文献
- Python issubclass() – Python 2 ドキュメント,
- issubclass() – Python 3 ドキュメント,
- Python の歴史と設計。なぜリッチな比較の代わりにissubclass()なのですか?- StackOverflowの質問です。