2015/06/03

Python Tips:type() と isinstance() をうまく使い分けたい

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
- StackOverflow

0 件のコメント: