この記事では、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)
指定したobject
がclassinfo
のインスタンスなら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()
は動的に型を生成する際にも使用されます。
それでは今回の内容はここまでです。ではまたどこかで〜( ・∀・)ノ