Categories: Python

【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()は動的に型を生成する際にも使用されます。

動的に型を生成する方法

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

ゆうまる

独学でプログラミングを勉強しているおじさん。いろんな言語を勉強したが浅く広くなためあまり仕事につながらない。また忘れっぽいため自分のブログを備忘録としても使っている。産まれてこのかたずっとネコを飼ってる生粋のネコ派。最近お腹が出てきて筋トレに奮闘中!

Recent Posts

【Dart】コンストラクタのデフォルト引数について

Dartのコンストラクタのデフォルト引数…

4週間 ago

【Unity】有料アセットを無料で手に入れる方法

この記事では、Unityの有料アセットを…

5か月 ago

【Python】任意の秒数だけ処理を一時停止する方法【sleep()関数】

この記事では、Pythonで任意の秒数だ…

1年 ago

【Python】Wordの文書の新規作成と読み書き

この記事では、Pythonを使ってWor…

1年 ago

【Python】メタクラスって結局なんなの?

この記事では、Pythonのメタクラスに…

1年 ago