LoginSignup
0
0

【Python】isinstance関数の使い方 & type関数との違いとは?

Posted at

概要

if isinstanceの使い方、また、type関数との違いをまとめました。

サンプルコード解説

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()関数の基本構文は以下の通りです:

isinstance(object, classinfo)
  • object: 型を調べたいオブジェクトを指定
  • classinfo: クラスやデータ型を指定

objectclassinfoに指定されたクラスやデータ型に属していればTrueを返し、属していなければFalseを返します。上記サンプルコードの例ではlistを指定しているので、listであれば合計値(total = sum(data))が返され、そうでなければ"Invalid input data"が返されます。

ちなみに以下のようにして、複数の型を指定することもできます。
以下はタプルかリストで指定しており、どちらかであればTrueが返されます。

    if isinstance(data, (list, tuple)):

type関数との違いは?

isinstance()は継承関係を考慮して型をチェックするのに対し、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_fruitの方はどちらもFalseを返します。これは、obj_fruitの型が厳密にはFruitクラスであり、Appleクラスではないためです。

obj_appleの方では、isinstance(obj_apple, Fruit)Trueを返しますが、type(obj_apple) == FruitではFalseを返します。obj_appleの型が厳密にはApple クラスであり、Fruitクラスではないと判断されていることがわかります。サブクラスまで考慮したいかどうかで使い分けると良いですね。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0