Pythonのissubclass関数の使い方を解説する

スポンサーリンク

今日はPythonのissubclass()メソッドに関するチュートリアルをお届けします。

では、さっそくこのトピックに入りましょう。

スポンサーリンク

Python issubclass() とは何ですか?

Python の issubclass() メソッドは、渡されたクラスが指定された classinfo (クラスまたはクラスオブジェクトのタプル) のサブクラスであるかどうかをチェックする組み込みメソッドです。

クラスが classinfo のサブクラス (直接、間接、仮想) である場合には、 True を返します。

そうでない場合は False を返します。

それ以外の場合は、例外 TypeError が発生します。

issubclass(class, classinfo)

classは、classinfo` のサブクラスであるかどうかを確認するためのクラス名です。

もし、classinfoがクラスのタプルであれば、この関数はその中に存在するクラスそれぞれに対して同じチェックを行う。

さて、 issubclass() が何をするのか基本的なことがわかったところで、より深く理解するためにいくつかの例を見てみましょう。

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 クラスから再び MenWomen という2つのクラスが継承されます(多階層継承)。

したがって、 MenWomen の両クラスは HumansAnimals のサブクラスとなります。

そして、HumansAnimals のサブクラスです。

これで、上位6つの結果が説明できます。

さらに、最後のケースでは、Trueとなります。

これは、Pythonのすべてのクラスは object クラスのサブクラスであるという事実のためです。

2. Python issubclass() クラスのタプルで考える

では、classinfoをクラスのタプルとして考えてみましょう。

以下の例をよく見てください。

Python Issubclass Output
issubclass() with Inheritance – Output

結果は以下の通りです。

Issubclass With Tuple Of Classes
issubclass() with Tuple Of Classes – Output

ここでも同じように継承の例を取りました。

先に述べたように、今回は 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の質問です。
タイトルとURLをコピーしました