Pythonにはisinstance()
とtype()
という2つの型判定関数があります。これらの関数は似ていますが、使い方や挙動には重要な違いがあります。
isinstance関数
isinstance()
関数は、指定したオブジェクトが指定した型に属しているかどうかを判定します。以下にその基本的な使い方を示します。
def process_data(data):
if isinstance(data, list):
total = sum(data)
return total
else:
return "Invalid input data"
data1 = [10, 20, 30, 40, 50]
data2 = "This is not a list"
result1 = process_data(data1)
result2 = process_data(data2)
print(result1) # 150
print(result2) # Invalid input data
この例では、isinstance()
関数を使ってdata
がリスト型であるかどうかをチェックしています。リスト型であればその合計値を返し、そうでなければエラーメッセージを返します。
type関数
一方、type()
関数はオブジェクトの型そのものを返します。しかし、type()
関数は継承関係を考慮しないため、サブクラスまで考慮したい場合はisinstance()
関数を使うべきです。
class Fruit:
pass
class Apple(Fruit):
pass
obj_fruit = Fruit()
obj_apple = Apple()
print(isinstance(obj_fruit, Apple)) # False
print(type(obj_fruit) == Apple) # False
print(isinstance(obj_apple, Fruit)) # True
print(type(obj_apple) == Fruit) # False
この例では、obj_apple
はFruit
クラスのサブクラスであるApple
クラスのインスタンスです。そのため、isinstance(obj_apple, Fruit)
はTrue
を返しますが、type(obj_apple) == Fruit
はFalse
を返します。これは、type()
関数がobj_apple
の型を厳密にApple
クラスと判断するためです。
以上のように、isinstance()
関数とtype()
関数はそれぞれ異なる状況で役立ちます。適切な関数を選択することで、Pythonプログラミングがより効率的になります。