Python isinstance()の使い方3つと注意事項

Python isinstance()関数は、type()と同様にオブジェクトのタイプを確認する際に使用する関数です。isinstance()関数は、特定のオブジェクトが特定のクラスやデータ型のインスタンスであるかどうかを確認する役割を果たします。これにより、コードの安定性を高め、タイプに応じた分岐処理を簡単に行うことができます。この記事では、isinstance()関数の使い方と便利な活用方法を紹介します。


Python isinstance() 関数の基本的な使い方

isinstance() 関数は、2つの引数を受け取ります。1つ目は確認したいオブジェクトで、2つ目は比較対象のクラスやデータ型です。返り値はTrueまたはFalseで、指定されたクラスのインスタンスであればTrueを返し、そうでない場合はFalseを返します。基本的な使い方は以下の通りです。

Python
isinstance(オブジェクト, クラス)

以下のコードでは、変数xint型かどうかを確認します。

Python
x = 4096
print(isinstance(x, int))

このように、変数xは整数型(int)であるため、Trueが出力されます。

図1. Pythonのisinstance()で整数型データを確認
図1. Pythonのisinstance()で整数型データを確認

複数クラスの確認

isinstance()の2つ目の引数には、単一のクラスだけでなく、タプル形式で複数のクラスを指定することも可能です。この場合、オブジェクトがタプルに含まれるクラスのいずれかに該当すれば、Trueを返します。

Python
x = 40.96
y = 4096
print(isinstance(x, (int, float)))
print(isinstance(y, (int, float)))

3行目では、xの値は40.96というfloatクラスの値であるため、Trueを返します。4行目では、yの値は4096というintクラスの値であるため、Trueを返します。

図2. Pythonのisinstance()で複数クラスを確認
図2. Pythonのisinstance()で複数クラスを確認

複数クラスの確認は、関数やメソッドでさまざまなデータ型を許容する必要がある場合に非常に便利です。これによりコードがより柔軟になり、誤った型のデータを処理する可能性を減らすことができます。

type() と比較した場合の isinstance() を使うべき理由

Pythonにはオブジェクトの型を確認する別の方法としてtype()関数も存在します。しかし、type()関数とは異なり、isinstance()関数はオブジェクトの継承関係を考慮します。例えば、サブクラスが親クラスを継承しているかどうかはisinstance()で確認できますが、type()関数ではそのクラスのみを確認することしかできません。

Python
class Animal:
    pass

class Cat(Animal):
    pass

cat = Cat()

print(isinstance(cat, Animal))
print(type(cat) == Animal)

isinstance()関数は、catオブジェクトがAnimalクラスを継承しているためTrueを返しますが、type()関数はCatクラスのインスタンスのみ正確に一致した場合にTrueを返します。

図3. isinstance()とtype()の違い:継承クラスの確認
図3. isinstance()type()の違い:継承クラスの確認

isinstance() の注意事項

  • 型チェックに過度に依存しないこと: Pythonは動的型付け(dynamic typing)をサポートする言語です。型を厳格にチェックしすぎると、Pythonの柔軟性が損なわれる可能性があります。そのため、本当に必要な場合にのみisinstance()を使用するのが良いでしょう。
  • タプルでクラスを指定する際の注意: 2つ目の引数でクラスをタプル形式で指定する場合、そのタプルが正しく作成されているか確認する必要があります。誤ってリストを渡したり、他のデータ型を入れると、”TypeError: isinstance() arg 2 must be a type, a tuple of types, or a union” というエラーが発生します。
図4. Pythonのisinstance()の2つ目の引数は必ずタプルで指定すること
図4. Pythonのisinstance()の2つ目の引数は必ずタプルで指定すること

まとめ

isinstance()関数は、Pythonでオブジェクトの型を確認する際に非常に便利なツールです。基本的なデータ型の確認だけでなく、継承関係でも正しく動作するため、type()関数よりも頻繁に使用されます。これを活用することで、コードの可読性を高め、さまざまなデータ型を処理する関数を作成することができます。しかし、Pythonの動的型付けの特性を考慮し、型チェックを過度に行うことは避けたほうが良いでしょう。

isinstance()を適切に活用して、オブジェクトの型を安全に確認し、より柔軟なコードを作成してみましょう!

リファレンス

関連ポスト

コメントする