\

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_appleFruitクラスのサブクラスであるAppleクラスのインスタンスです。そのため、isinstance(obj_apple, Fruit)Trueを返しますが、type(obj_apple) == FruitFalseを返します。これは、type()関数がobj_appleの型を厳密にAppleクラスと判断するためです。

以上のように、isinstance()関数とtype()関数はそれぞれ異なる状況で役立ちます。適切な関数を選択することで、Pythonプログラミングがより効率的になります。

投稿者 admin

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です