Python PR

【Python】オブジェクトの型を確認・判定する方法

記事内に商品プロモーションを含む場合があります

この記事では、Pythonでオブジェクトの型を確認したり、判定する方法を解説します。

型を確認するにはtype関数、型を判定するにはisinstance関数を使います。

それでは、型を確認・判定する方法を見ていきましょう!

型を確認する

型を確認するには、組み込み関数のtype()を使います。

type(object)

試しに色々なオブジェクトの型を確認してみましょう。

n = 1
print(type(n))  # <class 'int'>

f = 3.14
print(type(f))  # <class 'float'>

s = 'abc'
print(type(s))  # <class 'str'>

l = [1, 2, 3]
print(type(l))  # <class 'list'>

ユーザー定義型も確認することができます。その場合は<class '__name__の値.型名'>という形で表現されます。

class C:
    pass

c = C()
print(type(c))  # <class '__main__.C'>

# module.pyというモジュールに同様のCを定義した場合
import module

c = module.C()
print(type(c))  # <class 'module.C'>

type()の戻り値は「型オブジェクト」という型で返されます。このオブジェクトは、型を表す以外に特有の操作はありません。

Link型オブジェクト - 組み込み型 — Python 3.10.4 ドキュメント

型を判定する

型を判定するには組み込み関数のisinstance()を使います。type関数の戻り値を比較して型を判定することもできますがisinstance()関数が推奨されています。

isinstance(object, classinfo)

指定したobjectclassinfoのインスタンスならTrueを返します。

n = 1
print(isinstance(n, int))    # True

f = 3.14
print(isinstance(f, float))  # True

s = 'abc'
print(isinstance(s, str))    # True

l = [1, 2, 3]
print(isinstance(l, list))   # True

また、サブクラスだった場合もTrueを返します。(bool型は、int型のサブクラス)

b = False
print(isinstance(b, int))  # True

classinfoは、タプル、またはユニオンオブジェクトを使うことで複数の型を指定することができます。ユニオンオブジェクトは、Python 3.10から使用できるようになりました。

def func(obj):
    # タプルで複数の型を指定
    return isinstance(obj, (int, str))


print(func(1))     # True
print(func('a'))   # True
print(func(3.14))  # False


def func(obj):
    # ユニオンオブジェクトで複数の型を指定
    return isinstance(obj, int | str)


print(func(1))     # True
print(func('a'))   # True
print(func(3.14))  # False

まとめ

この記事では、オブジェクトの型を確認したり、判定する方法を解説しました。

今回紹介した関数(type(), isinstance())はどちらもよく使うものなので覚えておくと便利です。

また、type()は動的に型を生成する際にも使用されます。

動的に型を生成する方法

それでは今回の内容はここまでです。ではまたどこかで〜( ・∀・)ノ