Python type()の使い方 2つの方法

Python type()関数は、オブジェクトのデータ型を確認できる非常に便利な関数です。開発者はこれを使って変数やオブジェクトのデータ型を簡単に把握し、それを活用してさまざまな条件処理やデバッグ作業を行うことができます。この記事では、type()関数の基本的な使い方から、さまざまな活用方法までを紹介します。


Python type() 関数の基本概念

type()関数は、Pythonの組み込み関数の1つで、引数として渡されたオブジェクトのデータ型を返します。

Python
num = 23
print(type(num))

上記のコードでは、変数numに割り当てられた値は23であり、これは整数型(integer)です。そのため、type(num)<class 'int'>を出力します。

図1. Python type()を整数型変数に対して実行した結果
図1. Python type()を整数型変数に対して実行した結果

type()は次のように、組み込みデータ型を確認するのに役立ちます。

  • int: 整数型データ
  • float: 浮動小数点型データ
  • str: 文字列型データ
  • list: リスト型データ
  • tuple: タプル型データ
  • dict: 辞書型データ

また、type()関数は、オブジェクトのデータ型を明確に教えてくれるツールとして、Pythonを学ぶ初心者やコードをデバッグする際に非常に役立ちます。

変数のデータ型を確認する

Pythonでは、変数を宣言する際にデータ型を明示する必要はありません。しかし、時々変数のデータ型を確認する必要が出てきます。特に複数のデータ型を同時に扱う場合、type()関数を使ってデータ型を確認することが望ましいです。

Python
a = 4096
b = 40.96
c = "4096MB"
d = [1024, 2048, 4096]

print(type(a))
print(type(b))
print(type(c))
print(type(d))

この例では、それぞれの変数が異なるデータ型を持っています。下の図のようにtype()を使用して各変数のデータ型を確認することができます。

図2. Python type()でint, float, str, listのデータ型を確認
図2. Python type()でint, float, str, listのデータ型を確認

type() と条件文の活用

type()関数は、条件文と組み合わせると非常に強力です。データ型に応じて異なる動作をさせる必要がある場合、type()を使って効率的にコードを作成できます。

Python
data = [4096, "4096MB", 40.96]

for item in data:
    if type(item) == int:
        print(f"{item} is integer.")
    elif type(item) == float:
        print(f"{item} is float.")
    elif type(item) == str:
        print(f"{item} is string.")

このコードは、リスト内のデータを1つずつ確認し、該当するデータのデータ型に応じたメッセージを出力します。type()を使用して各データがどのデータ型かを判断し、条件を分岐処理した結果は次の通りです。

図3. Python type()で確認したデータ型による分岐処理
図3. Python type()で確認したデータ型による分岐処理

動的クラス生成

type()関数は、オブジェクトのデータ型を返すだけでなく、非常に特別な機能を持っています。それは、動的にクラスを生成できる点です。この機能は、主に実行時に新しいクラスを作成したい場合に役立ちます。

Python
MyClass = type('MyClass', (object,), {'size': 4096})

obj = MyClass()
print(obj.size)
type(obj)

上記のコードは、type()を使用してMyClassという名前のクラスを動的に生成したものです。クラス名、継承する親クラス、クラス属性などを引数として渡すことで、即座にクラスを作成できます。また、5行目では組み込み型ではないMyClassクラスについても確認が可能です。

図4. Python type()で動的にクラスを生成し、クラスを確認
図4. Python type()で動的にクラスを生成し、クラスを確認

注意事項

type()関数は非常に便利ですが、データ型を直接比較する場合、isinstance()関数と一緒に使う方が適切な場合もあります。type()は正確なデータ型のみを確認しますが、isinstance()は継承関係も考慮してデータ型を判断するためです。

Python
a = 4096
print(type(a) == int)
print(isinstance(a, int))

class Animal:
    pass

class Dog(Animal):
    pass

d = Dog()
print(type(d) == Animal)
print(isinstance(d, Animal))

下の図に示すように、isinstance()はオブジェクトが親クラスのインスタンスであるかどうかも確認できます。継承関係を考慮したデータ型の確認が必要な場合は、type()よりもisinstance()を使う方が良いです。

図5. Python type()の代わりにisinstance()を使用すべき場合(親クラスのインスタンス確認)

まとめ

type()関数はPythonにおいて非常に強力なツールであり、オブジェクトのデータ型を確認したり、動的にクラスを生成するなど、さまざまな方法で活用できます。特に複数のデータ型を扱う際や、データ型に応じた条件処理が必要な場合に非常に役立ちます。また、継承関係を考慮する必要がある場合は、type()よりもisinstance()を使用する方が適切です。しかし、特定のクラスであることを明確に確認する必要がある場合には、type()を使用して明確に確認する方が確実です。

リファレンス

関連ポスト

コメントする