Python の isinstance(item, list) について解説
isinstance() とは?
Python の isinstance() は、指定したオブジェクトが特定の型(クラス)であるかどうかを判定するための組み込み関数です。
基本構文
isinstance(object, classinfo)
-
object:判定したいオブジェクト -
classinfo:確認したい型(クラス)
この関数は、object が classinfo のインスタンスであれば True を、そうでなければ False を返します。
isinstance(item, list) の意味
isinstance(item, list) は、item が list 型のインスタンスかどうかをチェックするために使われます。
例
item1 = [1, 2, 3]
item2 = "Hello"
item3 = (1, 2, 3)
print(isinstance(item1, list)) # True
print(isinstance(item2, list)) # False
print(isinstance(item3, list)) # False
上記の例では、item1 はリストなので True になりますが、文字列(str 型)である item2 やタプル(tuple 型)である item3 は False になります。
isinstance() を使うメリット
1. 型チェックによるエラー防止
Python は動的型付け言語なので、変数の型を明示的に指定する必要はありません。しかし、型の違いによるエラーを防ぐために isinstance() を使うことで、安全なコードを書けます。
def add_elements(item):
if isinstance(item, list):
return sum(item)
else:
raise TypeError("引数はリスト型である必要があります。")
print(add_elements([1, 2, 3])) # 6
print(add_elements("Hello")) # TypeError
この関数は、引数がリストである場合のみ処理を続行し、そうでない場合は TypeError を発生させます。
2. 複数の型を同時にチェック
isinstance() は、複数の型をタプルとして渡すことで、一度に複数の型のチェックができます。
item = (1, 2, 3)
print(isinstance(item, (list, tuple))) # True
このコードでは、item が list または tuple のどちらかであれば True になります。
isinstance(item, list) の注意点
1. サブクラスの影響
Python では list を継承したクラスも isinstance(item, list) に True を返します。
class MyList(list):
pass
my_list = MyList([1, 2, 3])
print(isinstance(my_list, list)) # True
このように、MyList は list を継承しているため、isinstance(my_list, list) は True になります。
2. type() との違い
type(item) == list を使うと、サブクラスは False になります。
print(type(my_list) == list) # False
したがって、サブクラスも許容する場合は isinstance() を、厳密に list のみをチェックする場合は type() を使うとよいでしょう。
まとめ
| 項目 | 説明 |
|---|---|
isinstance(item, list) |
item が list のインスタンスかを判定する |
| 型チェックの利点 | エラー防止、複数の型のチェックが可能 |
type(item) == list との違い |
isinstance() はサブクラスも許容するが、type() は厳密な型チェックを行う |
isinstance(item, list) は、プログラムの安全性を向上させるために便利な関数です。型の違いによるエラーを防ぐために、適切に活用しましょう!