0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Pythonにおけるtypeとisinstanceの違い

Posted at

typeとisinstanceの違い

Python組み込みのtype()isinstance()はオブジェクトの型(クラス)を判定するために使用される関数ですが、微妙な違いがあります。

結論

次のユースケースでは基本的にisinstance()を使う。

  • クラスの継承元のインスタンスか判定
  • 複数の型で確認

厳密にオブジェクトの型を調べる時はtype()を使う。

理由

理由としては次のようなことが挙げられる。

  • type()は厳密に何のインスタンスか返すため、継承元のクラスのインスタンスであることを判定できない
  • type()では複数の型を同時に調べることができない

具体例

継承元のインスタンスかどうか判定したいとき

  • Carクラスを継承したMyCarというクラスがある
  • mycarMyCarでインスタンス化する
  • 継承元のCarクラスのインスタンスかMyCarのインスタンスか調べる
class Car():
    pass

class MyCar(Car):
    pass

mycar = MyCar()

print(type(mycar) is Car) # False
print(type(mycar) is MyCar) # True

print(isinstance(mycar, Car)) # True
print(isinstance(mycar, MyCar)) # True

変数numberintfloatの時に条件分岐で処理を進めたいとき

# typeを使った例
number = 42
if (type(number) is int) or (type(number) is float):
    print(f"number: {type(number)}") # number: <class 'int'>

# isinstanceを使った例
number = 42.0
if isinstance(number, (int, float)):
    print(f"number: {type(number)}") # number: <class 'float'>

要点

厳密さを求めるなら全てにおいてtype()を使って判定した方が良いが、冗長になる可能性が高い。違いをきちんと理解して使い分けれるようになりたいところ。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?