Python には type()
と isinstance()
というよく似た関数が存在します。今回はそれらの使い分け方法についてご紹介します。
結論からいうと次のようなちがいがあります。
type()
: そのインスタンスを生成したクラスを返すisinstance()
: ふたつの引数がオブジェクトとクラスの関係にあるかどうかを返す
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()
が有用です。