TL;DR
isinstance()はオブジェクトの型を調べる組み込み関数である。引数のチェック、関数、メソッドの戻り値を調べるときに利用する。組み込み関数の type 関数や isinstance 関数で型を調べることができる。
isinstance()のポイント
isinstace(オブジェクト, クラス)
- 第一引数に渡したオブジェクトが第二引数に渡したクラスに属していれば True を返す
- 結果は bool 型で得ることができる
整数か調べる。
isinstance(100, int)
# True
第二引数にタプルを使う。第二引数が型オブジェクトのタプルの場合、 第一引数がいずれかのインスタンスであれば True を返す。
isinstance(1, (int, str))
# True
文字型が調べる。
isinstance('a', str)
# True
辞書の型を調べる。
a = {}
isinstance(a, dict)
# True
a = {}
isinstance(a, object)
# True
a = {}
isinstance(a, int)
# False
クラスを調べる。
class A:
pass
a = A()
isinstance(a, A)
# True
type() との違い
isinstance()は、サブクラスから生成したオブジェクトはスーパークラスと同じ型であると判定する。
しかし、type()は、サブクラスとスーパークラスは異なると判定する。
class A():
pass
class B(A):
pass
a = A()
b = B()
isinstance(a, A) # True
isinstance(b, A) # True
type(a) == A # True
type(b) == A # False