Pythonのtype関数とは?型を確認する方法をわかりやすく解説!

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'>

それぞれの型をまとめると、次のようになります。

説明
100int整数
"Python"str文字列
12.5float小数
Truebool真偽値
[1, 2, 3]listリスト
(1, 2, 3)tupleタプル
{"name": "Taro"}dict辞書
{1, 2, 3}set集合
NoneNoneType値がないことを表す

変数の型を確認する場合も同じです。

name = "Python"

print(type(name))
# <class 'str'>

変数nameには文字列が代入されているため、str型と表示されます。

type関数の結果に「class」と表示される理由

type関数の実行結果を見ると、次のようにclassと表示されます。

print(type(100))
# <class 'int'>

print(type("Python"))
# <class 'str'>

Pythonでは、intstrなどの型も、内部的にはクラスとして定義されているからです。そのため、type関数の結果は<class 'int'><class 'str'>のように表示されます。上記の場合、「整数の100intクラスのインスタンス、文字列の"Python"strクラスのインスタンス」という意味です。

なお、type関数が返すstrintなどは、型を表すクラスであり、これら自体はtypeクラスのインスタンスです。

print(type(type("Python")))
# <class 'type'>

print(type(str))
# <class 'type'>

print(type(int))
# <class 'type'>

つまり、以下のような関係になります。

  • 100intクラスのインスタンス
  • "Python"strクラスのインスタンス
  • intstr自体はtypeクラスのインスタンス

type関数で型を判定する

type関数を使って、変数が特定の型かどうかを判定することもできます。

例えば、変数valueint型か確認する場合は、次のようにします。

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))
# True

valuestr型なので、結果は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))
# True

dogの実際の型はDogなので、type(dog) is AnimalFalseになります。一方、DogAnimalを継承しているため、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))
# False

type関数はどんなときに使う?

type関数は、プログラムを作っている途中で、変数にどのような型の値が入っているのか確認したいときに便利です。

例えば、input関数を使って値を入力してみます。

value = input("数字を入力してください: ")

print(type(value))

ここで100と入力した場合でも、実行結果は次のようになります。

<class 'str'>

input関数で入力した値は、文字列として取得されるためです。

このように、「数値だと思っていたのに文字列だった」といった場合に、type関数を使うことで実際の型を確認できます。

本記事のまとめ

この記事では「Pythonのtype関数」について、以下の内容を説明しました。

  • type関数は値や変数の型を確認するために使用する
  • type(値)の形式で使用する
  • intstrfloatlistなど、さまざまな型を確認できる
  • type関数を使って型を判定することもできる
  • 型の判定ではisinstanceを使うことも多い

Pythonで「この値は何型なのか」を確認したい場合は、type関数を使うと簡単に確認できます。

お読みいただきありがとうございました。

スポンサーリンク