Pythonのtypeとisinstanceの使い分け

環境

  • Windows 10
  • Python 3.10.1
  • VSCode

使用するソースコード

以下の公開リポジトリに置いています

GitHub - masayan1126/tao-py-py: 作業自動化用 Python ライブラリ
作業自動化用 Python ライブラリ. Contribute to masayan1126/tao-py-py development by creating an account on GitHub.

前提

  • Pythonは動的型付け言語なので、何かしらの処理の前にデータ型を判定しておく必要があるケースがよくある
  • こういった場合に便利なのが、type()とisinstance()です。これらは、対象となる値のデータ型を判定することが可能な組み込みの関数
  • それぞれの関数には明確な違いがあるので、それぞれの違いを把握しておくことが重要

<使用例>

type(1) // <class 'int'>
isinstance(1, int)

結論

  • 型を正確に判定したい場合はtype()を、継承も考慮した上で判定したい場合はisinstance()を使うようにする
  • 例えば、わかりやすい例だと、Pythonでは、boolはintのサブクラスなので、typeとisinstanceの結果はそれぞれ以下のように異なる
print(type(True) == int) # False
print(isinstance(True, int)) # True

※boolの実装を見ると、intを継承していることがわかる

builtins.pyi

@final
class bool(int):
  ...

Python学習におすすめの書籍

独習Python/山田祥寛【3000円以上送料無料】
bookfan 1号店 楽天市場店
¥ 3,300(2022/08/04 17:32時点)
タイトルとURLをコピーしました