Python には type() と isinstance() というよく似た関数が存在します。今回はそれらの使い分け方法についてご紹介します。
結論からいうと、次のようなちがいがあります。
- type() そのインスタンスを生成したクラスを返す
- isinstance() ふたつの引数がオブジェクトとクラスまたはそのスーパークラスの関係にあれば True を返す
class Onitsuka(object):
pass
class Puma(Onitsuka):
pass
p1 = Puma()
# type は直接そのインスタンスのクラスを返す
print(type(p1) == Puma) # => True
print(type(p1) == Onitsuka) # => False
# isinstance 継承元も含めてチェックする
print(isinstance(p1, Puma)) # => True
print(isinstance(p1, Onitsuka)) # => True
以上です。
ちなみに、クラス間の継承関係をチェックするには issubclass() 関数やクラスメソッド mro() を使うことができます。
Python Tips:クラスの継承関係をチェックしたい
[Differences between isinstance() and type() in python