isinstance関数およびtype関数の使い方(オブジェクトのデータ型を判定する、オブジェクトの型を取得する)

広告
eyecatch

Python で用意されている組み込み関数の中の isinstance 関数および type 関数の使い方です。 isinstance 関数はオブジェクトのデータ型の判定に使用します。また type 関数はオブジェクトのデータ型を取得します。

type関数の書式と基本的な使い方

type 関数は引数に指定したオブジェクトのデータ型を表す型オブジェクトを返します。 type 関数の書式は次の通りです。

type(object)

引数に指定してオブジェクトのデータ型を取得します。

>>> type("Hello")
<class 'str'>
>>> type(123)
<class 'int'>
>>>

type 関数で取得した型オブジェクトは is 演算子を使用することで指定したデータ型と同じかどうかを調べることができます。

>>> print(type("Hello") is str)
True
>>> print(type("Hello") is int)
False
>>> print(type(123) is int)
True
>>> print(type(123.4) is int)
False
>>>

複数のデータ型と比較する場合には in 演算子を使用することで調べることができます。

>>> print(type("Hello") in (str, int))
True
>>> print(type(123) in (str, int))
True
>>> print(type(123.4) in (str, int))
False
>>>

このように type 関数を使用することで、引数に指定したオブジェクトのデータ型を取得したり、指定したデータ型と同じかどうかを判定することができます。

サンプルプログラム

簡単なサンプルプログラムを作って試してみます。テキストエディタで次のように記述したあと、 sample7-1.py という名前で保存します。

print(type("str"))
print(type(100))
print(type(14.5))
print(type(7.0 + 5j))
print(type([1, 2, 3]))
print(type((1, 2, 3)))
print(type({1:"A", 2:"B", 3:"C"}))
print(type(True))
print(type(None))

type関数の書式と基本的な使い方(1)

その後、次のように実行してください。

python sample7-1.py

type関数の書式と基本的な使い方(2)

Python で使用される主なデータ型について type 関数でどのような値が帰ってくるのかを確認しました。

-- --

もう一つサンプルプログラムを作って試してみます。テキストエディタで次のように記述したあと、 sample7-2.py という名前で保存します。

mylist = [2, "ab", 3.5, True, 4]
total = 0

for val in mylist:
    if type(val) in (int, float):
        print("val:" + str(val))
        total += val

print("total:" + str(total))

type関数の書式と基本的な使い方(3)

その後、次のように実行してください。

python sample7-2.py

type関数の書式と基本的な使い方(4)

リストに格納された値のデータ型を調べ、整数型または浮動小数点数型だった場合は値を出力して合計を計算しました。

isinstance関数の書式と基本的な使い方

isinstance 関数は 1 番目の引数に指定したオブジェクトが 2 番目の引数に指定したデータ型と等しいかどうかを返します。 isinstance 関数の書式は次の通りです。

isinstance(object, classinfo)

1 番目の引数に指定したオブジェクトが 2 番目の引数に指定したデータ型のオブジェクトかサブクラスのオブジェクトの場合に True を返します。

例えば次のように使います。

>>> print(isinstance(1, int))
True
>>> print(isinstance(1, str))
False
>>> print(isinstance("abc", str))
True
>>> print(isinstance("abc", int))
False
>>>

複数のデータ型と比較する場合には、 2 番目に引数として複数のデータ型を要素としてもつタプルを指定してください。

>>> print(isinstance(1, (int, float)))
True
>>> print(isinstance(2.5, (int, float)))
True
>>> print(isinstance("ab", (int, float)))
False
>>>

isinstance 関数と type 関数の違いとして、 isinstance 関数は 2 番目の引数に指定したデータ型のサブクラスのオブジェクトであっても真となります。その為、サブクラスも含めて同じデータ型かどうか調べたい場合には isinstance 関数を使うと便利です。

>>> print(isinstance(3, int))
True
>>> print(isinstance(True, int))
True
>>> print(isinstance(True, bool))
True
>>>

bool 型は int 型のサブクラスのため、 bool 型のオブジェクトである True は int 型と同じかどうか調べた場合に真となります。

サンプルプログラム

それでは簡単なサンプルプログラムを作って試してみます。テキストエディタで次のように記述したあと、 sample7-3.py という名前で保存します。

mylist = [2, "ab", 3.5, True, 4]
total = 0

for val in mylist:
    if isinstance(val, (int, float)):
        print("val:" + str(val))
        total += val

print("total:" + str(total))

isinstance関数の書式と基本的な使い方(1)

その後、次のように実行してください。

python sample7-3.py

isinstance関数の書式と基本的な使い方(2)

リストに格納された値のデータ型を調べ、整数型または浮動小数点数型だった場合は値を出力して合計を計算しました。今回の場合は True も整数型として識別されています( True は数値の 1 として扱われます)。

-- --

Python の組み込み関数の一つである type 関数および isinstance 関数の使い方について解説しました。

( Written by Tatsuo Ikura )

関連記事 (一部広告含む)
Profile
profile_img

著者 / TATSUO IKURA

初心者~中級者の方を対象としたプログラミング方法や開発環境の構築の解説を行うサイトの運営を行っています。