Python type()関数の使い方:変数の「型」を知るための基本
Pythonでプログラミングをしていると、「この変数にはどんな種類のデータが入っているんだろう?」「特定の型のデータかどうかをチェックしたい」と思うことがありますよね。そんな時に大活躍するのが、Pythonの組み込み関数である**type()関数**です。type()関数を使えば、任意のオブジェクトの型を簡単に調べることができ、コードの理解やデバッグに役立ちます。
type()関数とは?
type()関数は、Pythonのオブジェクトの**型(クラス)**を返す組み込み関数です。Pythonでは、数値、文字列、リスト、関数など、すべてのものがオブジェクトであり、それぞれに特定の型が割り当てられています。type()関数は、そのオブジェクトがどのクラスに属しているかを示してくれるのです。
基本的な使い方は非常にシンプルで、調べたいオブジェクトを引数として渡すだけです。
type()関数の基本的な使い方
1. オブジェクトの型を取得する
type()関数にオブジェクトを渡すと、そのオブジェクトの型を表すtypeオブジェクトが返されます。
コード例
# 様々な型のオブジェクト
my_int = 10
my_float = 3.14
my_string = "Hello"
my_list = [1, 2, 3]
my_dict = {'a': 1, 'b': 2}
my_bool = True
my_none = None
# 各オブジェクトの型を出力
print(f"my_int の型: {type(my_int)}")
print(f"my_float の型: {type(my_float)}")
print(f"my_string の型: {type(my_string)}")
print(f"my_list の型: {type(my_list)}")
print(f"my_dict の型: {type(my_dict)}")
print(f"my_bool の型: {type(my_bool)}")
print(f"my_none の型: {type(my_none)}")
# 関数の型も調べられる
def my_function():
pass
print(f"my_function の型: {type(my_function)}")
# カスタムクラスの型も調べられる
class MyClass:
pass
my_object = MyClass()
print(f"my_object の型: {type(my_object)}")
出力例
my_int の型: <class 'int'>
my_float の型: <class 'float'>
my_string の型: <class 'str'>
my_list の型: <class 'list'>
my_dict の型: <class 'dict'>
my_bool の型: <class 'bool'>
my_none の型: <class 'NoneType'>
my_function の型: <class 'function'>
my_object の型: <class '__main__.MyClass'>
出力結果の<class 'int'>や<class 'str'>は、それぞれが整数型や文字列型であることを示しています。カスタムクラスの場合、__main__はそのクラスが定義されたモジュールを示します。
2. 型を比較する
type()関数を使って取得した型は、他の型と比較することができます。これは、条件分岐などで特定の型のオブジェクトに対してのみ処理を行いたい場合に便利です。
コード例
def process_data(data):
if type(data) is str:
print(f"文字列を処理中: {data.upper()}")
elif type(data) is int:
print(f"整数を処理中: {data * 2}")
else:
print(f"不明な型: {type(data)}")
process_data("hello")
process_data(100)
process_data([1, 2])
出力例
文字列を処理中: HELLO
整数を処理中: 200
不明な型: <class 'list'>
⚠️注意点: 型のチェックには、通常isinstance()関数を使うことが推奨されます。isinstance()は継承関係も考慮して型をチェックするため、より柔軟で安全です。例えば、boolはintのサブクラスなので、type(True) is intはFalseですが、isinstance(True, int)はTrueになります。
print(f"type(True) is bool: {type(True) is bool}") # True
print(f"type(True) is int: {type(True) is int}") # False (boolはintのサブクラスだが、type()は厳密な型を返す)
print(f"isinstance(True, bool): {isinstance(True, bool)}") # True
print(f"isinstance(True, int): {isinstance(True, int)}") # True (継承関係も考慮)
type()関数のもう一つの使い方:動的にクラスを生成する
type()関数には、もう一つ別の使い方があります。それは、実行時に新しいクラスを動的に作成することです。これはメタプログラミングの領域であり、通常のプログラミングではあまり使う機会はありませんが、Pythonのオブジェクトモデルの深淵を理解する上で非常に興味深い機能です。
type(name, bases, dict)という3つの引数を取る形式で使われます。
-
name: 作成するクラスの名前(文字列) -
bases: 継承する基底クラスのタプル -
dict: クラスの属性(メソッド、変数など)を含む辞書
コード例
# type()を使って動的にMyDynamicClassを作成
MyDynamicClass = type('MyDynamicClass', (object,), {
'version': '1.0',
'greet': lambda self, name: f"Hello, {name} from {self.version}"
})
# 動的に作成されたクラスのインスタンス化とメソッド呼び出し
instance = MyDynamicClass()
print(f"クラス名: {type(instance).__name__}")
print(f"バージョン: {instance.version}")
print(instance.greet("World"))
出力例
クラス名: MyDynamicClass
バージョン: 1.0
Hello, World from 1.0
この機能は、フレームワーク開発や、コード生成ツールなどで特定のパターンに基づいてクラスを自動生成する際に利用されることがあります。
まとめ
Pythonのtype()関数は、オブジェクトの型(クラス)を調べるための基本的なツールです。デバッグ時や、特定の型に基づいて条件分岐を行いたい場合に非常に役立ちます。ただし、型のチェックには通常、継承関係を考慮するisinstance()関数を使う方がより適切です。
また、type()関数には、実行時に動的にクラスを作成するという高度な機能もありますが、これは特定のユースケースに限定されます。まずはオブジェクトの型を知るための基本としてtype()関数を使いこなすことから始めましょう!
■プロンプトだけでオリジナルアプリを開発・公開してみた!!
■AI時代の第一歩!「AI駆動開発コース」はじめました!
テックジム東京本校で先行開始。
■テックジム東京本校
「武田塾」のプログラミング版といえば「テックジム」。
講義動画なし、教科書なし。「進捗管理とコーチング」で効率学習。
より早く、より安く、しかも対面型のプログラミングスクールです。
<短期講習>5日で5万円の「Pythonミニキャンプ」開催中。
<月1開催>放送作家による映像ディレクター養成講座
<オンライン無料>ゼロから始めるPython爆速講座



