Pythonでは、変数に入っている値が「文字列なのか」「数値なのか」など、データの型を確認したいことがあります。
そんなときに使うのが、type関数です。
この記事では、Pythonのtype関数とは何なのか、基本的な使い方やisinstanceとの違いについて、わかりやすく解説します。
type関数とは?
type関数は、引数に渡したオブジェクトの型を返す関数です。
基本的な書き方は次のとおりです。
type(値)例えば、整数100の型を確認する場合は、次のようにします。
print(type(100))実行結果は以下のようになります。
<class 'int'>intは整数を表す型です。
このように、type関数を使うことで、指定した値がどの型なのかを確認できます。
type関数でさまざまな型を確認する
type関数では、整数だけでなく、文字列や小数、リストなど、さまざまな値の型を確認できます。
例えば、次のようにします。
print(type(100))
# <class 'int'>
print(type("Python"))
# <class 'str'>
print(type(12.5))
# <class 'float'>
print(type(True))
# <class 'bool'>
print(type([1, 2, 3]))
# <class 'list'>
print(type((1, 2, 3)))
# <class 'tuple'>
print(type({"name": "Taro"}))
# <class 'dict'>
print(type({1, 2, 3}))
# <class 'set'>
print(type(None))
# <class 'NoneType'>それぞれの型をまとめると、次のようになります。
| 値 | 型 | 説明 |
|---|---|---|
100 | int | 整数 |
"Python" | str | 文字列 |
12.5 | float | 小数 |
True | bool | 真偽値 |
[1, 2, 3] | list | リスト |
(1, 2, 3) | tuple | タプル |
{"name": "Taro"} | dict | 辞書 |
{1, 2, 3} | set | 集合 |
None | NoneType | 値がないことを表す |
変数の型を確認する場合も同じです。
name = "Python"
print(type(name))
# <class 'str'>変数nameには文字列が代入されているため、str型と表示されます。
type関数の結果に「class」と表示される理由
type関数の実行結果を見ると、次のようにclassと表示されます。
print(type(100))
# <class 'int'>
print(type("Python"))
# <class 'str'>Pythonでは、intやstrなどの型も、内部的にはクラスとして定義されているからです。そのため、type関数の結果は<class 'int'>や<class 'str'>のように表示されます。上記の場合、「整数の100はintクラスのインスタンス、文字列の"Python"はstrクラスのインスタンス」という意味です。
なお、type関数が返すstrやintなどは、型を表すクラスであり、これら自体はtypeクラスのインスタンスです。
print(type(type("Python")))
# <class 'type'>
print(type(str))
# <class 'type'>
print(type(int))
# <class 'type'>つまり、以下のような関係になります。
100はintクラスのインスタンス"Python"はstrクラスのインスタンスintやstr自体はtypeクラスのインスタンス
type関数で型を判定する
type関数を使って、変数が特定の型かどうかを判定することもできます。
例えば、変数valueがint型か確認する場合は、次のようにします。
value = 100
if type(value) is int:
print("int型です")
# int型ですtype(value)で変数valueの型を取得し、それがintかどうかを確認しています。
次のように==を使うこともできます。
value = 100
if type(value) == int:
print("int型です")
# int型ですただし、型を判定するときは、type関数ではなくisinstance関数を使うこともあります(isinstance関数については後ほど解説します)。
複数の型のいずれかを判定する
変数が複数の型のうち、どれか1つに当てはまるかを確認したい場合は、in演算子とタプルを使うことができます。
例えば、値がstr型またはint型かを確認する場合は、次のようにします。
value = "Python"
print(type(value) in (str, int))
# Truevalueはstr型なので、結果はTrueになります。
type関数とisinstance関数の違い
Pythonには、型を確認するときに使えるisinstance関数もあります。
isinstance関数は、第一引数に指定した値が、第二引数に指定した型、またはそのサブクラスのインスタンスかどうかを確認する関数です。
例えば、次のように使います。
print(isinstance("Python", str))
# True
print(isinstance(100, str))
# False第二引数には、複数の型をタプルで指定することもできます。
print(isinstance(100, (int, str)))
# True
print(isinstance(12.5, (int, str)))
# Falseこの場合、指定した型のいずれか、またはそのサブクラスのインスタンスであればTrueを返します。
type()とisinstance()の大きな違いは、クラスの継承を考慮するかどうかです。
type()で型を比較した場合は、指定した型と完全に一致するときだけTrueになります。一方、isinstance()は、指定した型を継承しているサブクラスのインスタンスに対してもTrueを返します。
例えば、次のようなクラスを定義します。
class Animal:
pass
class Dog(Animal):
pass
dog = Dog()
print(type(dog) is Dog)
# True
print(type(dog) is Animal)
# False
print(isinstance(dog, Dog))
# True
print(isinstance(dog, Animal))
# Truedogの実際の型はDogなので、type(dog) is AnimalはFalseになります。一方、DogはAnimalを継承しているため、isinstance(dog, Animal)はTrueになります。
Pythonの標準的な型でも、継承によって結果が異なる場合があります。例えば、bool型はint型のサブクラスです。isinstance()では継承元のintに対してもTrueを返します。
print(type(True) is bool)
# True
print(type(True) is int)
# False
print(isinstance(True, bool))
# True
print(isinstance(True, int))
# Trueそのため、型が完全に一致しているか確認したい場合はtype()、継承関係も含めて判定したい場合はisinstance()を使うと分かりやすいです。
なお、あるクラスが別のクラスのサブクラスかどうかを確認するには、issubclass()関数を使えます。
print(issubclass(bool, int))
# True
print(issubclass(bool, str))
# Falsetype関数はどんなときに使う?
type関数は、プログラムを作っている途中で、変数にどのような型の値が入っているのか確認したいときに便利です。
例えば、input関数を使って値を入力してみます。
value = input("数字を入力してください: ")
print(type(value))ここで100と入力した場合でも、実行結果は次のようになります。
<class 'str'>input関数で入力した値は、文字列として取得されるためです。
このように、「数値だと思っていたのに文字列だった」といった場合に、type関数を使うことで実際の型を確認できます。
本記事のまとめ
この記事では「Pythonのtype関数」について、以下の内容を説明しました。
type関数は値や変数の型を確認するために使用するtype(値)の形式で使用するintやstr、float、listなど、さまざまな型を確認できるtype関数を使って型を判定することもできる- 型の判定では
isinstanceを使うことも多い
Pythonで「この値は何型なのか」を確認したい場合は、type関数を使うと簡単に確認できます。
お読みいただきありがとうございました。