Pythonではオブジェクトのデータ型を判定するためにはPythonの組み込み関数を利用するのが一般的です。
参考 関数とは?
このページでは、その中でも主要な関数であるtype関数/isinstance関数の使い方・使い分けをわかりやすく解説します。
ポイント1 type()
関数
Pythonのtype()
関数は、指定したオブジェクトの型を返します。これを使用すると、オブジェクトがどのデータ型に属するかを調べることができます。
num = 123 print(type(num)) # <class 'int'> str_var = "Hello, Python!" print(type(str_var)) # <class 'str'> list_var = [1, 2, 3, 4, 5] print(type(list_var)) # <class 'list'>
ポイント2 isinstance()
関数
isinstance()
関数は、指定したオブジェクトが指定した型に属しているかどうかを判定します。これは特定の型が期待される場合に便利です。
num = 123 print(isinstance(num, int)) # True str_var = "Hello, Python!" print(isinstance(str_var, str)) # True list_var = [1, 2, 3, 4, 5] print(isinstance(list_var, list)) # True
Pythonエンジニアを目指す方であれば知らないと恥ずかしい超・基本知識の1つです。是非最後までご覧ください
前提:データ型を判定する必要性
プログラミングにおけるデータ型の判定は、以下のような理由から重要な役割を果たします。
プログラミングにまだ慣れていない人は見過ごしがちな点ですが、この点をしっかり理解しておかないと後から必ず痛い目にあいます・・・。ので、確実に頭に入れておきましょう。
a = "123" b = 456 # c = a + b # TypeError: can only concatenate str (not "int") to str
以上のような理由から、プログラミングにおけるデータ型の判定は重要な概念であり、プログラムが正しく、効率的に動作するための基礎となります。
Pythonではデータ型の判定・確認を行う際にはtype関数やisinstance関数を利用します。ここからはサンプルコード付きで具体的に2つの関数の利用方法をわかりやすくご説明します。
Python:type関数
Pythonのtype()
関数は、引数として渡されたオブジェクトのデータ型を返します。
type(オブジェクト)
データ型判定をしたいオブジェクトを引数に指定するだけ。
num = 123 print(type(num)) # <class 'int'> str_var = "Hello, Python!" print(type(str_var)) # <class 'str'> list_var = [1, 2, 3, 4, 5] print(type(list_var)) # <class 'list'>
参考 print関数
以上のサンプルコードでは、type()
関数を用いてそれぞれのオブジェクトの型を確認しています。
注意点としては、type()
関数が返すのは型そのものです。つまり、返された型を文字列として扱いたい場合には、str()
関数を用いて変換する必要があるという点に注意しましょう。
参考 str関数の使い方
以上が、Pythonのtype()
関数の基本的な説明と使用法。type()
関数はPythonプログラミングの基本的な部分であり、頻繁に使用されるため、必ず頭に入れておきましょう!
Python:isinstance関数
isinstance()
関数は、指定したオブジェクトが指定した型に属しているかどうかを判定します。これは特定の型が期待される場合や、あるオブジェクトが特定のクラスのインスタンスであるかどうかを調べるために使用されます。
isinstnace(オブジェクト,クラス)
isinstance関数は 1 番目の引数に指定したオブジェクトが 2 番目の引数に指定したデータ型と等しいかどうかを判定します。
num = 123 print(isinstance(num, int)) # True str_var = "Hello, Python!" print(isinstance(str_var, str)) # True list_var = [1, 2, 3, 4, 5] print(isinstance(list_var, list)) # True
以上のサンプルコードでは、isinstance()
関数を用いてそれぞれのオブジェクトが指定した型に属しているかを確認しています。
注意点としては、2つ目の引数にはタプルを指定することができ、その場合、object
がタプル内のいずれかの型に属しているかどうかを判定します。
これは、複数の型を許容する場合に便利です。
num = 123 print(isinstance(num, (int, float))) # True
この例では、num
が整数または浮動小数点数のいずれかであればTrue
を返します。
isinstance()
関数はプログラムが正しく動作するための重要なツールであり、型安全を確保するために広く使用されます。
type関数とisinstance関数の相違点
type()
関数とisinstance()
関数はどちらもPythonでオブジェクトのデータ型を調べるために使用されますが、その使い方と結果が異なる点があります。
相違点1:継承の取り扱い
type()
関数とisinstance()
関数の主な違いは、クラスの継承をどのように扱うかです。
type()
関数は、オブジェクトの厳密な型を返します。つまり、オブジェクトが特定のクラスのサブクラスのインスタンスであっても、そのスーパークラスの型とは見なされません。一方、isinstance()
関数は、オブジェクトが指定されたクラスまたはそのサブクラスのインスタンスである場合、True
を返します。
class Parent: pass class Child(Parent): pass child = Child() print(type(child) == Parent) # False print(isinstance(child, Parent)) # True
参考 クラスとは?
このコードでは、child
オブジェクトはChild
クラスのインスタンスであり、このクラスはParent
クラスを継承しています。
しかし、type(child) == Parent
はFalse
を返し、isinstance(child, Parent)
はTrue
を返します。つまり、isinstance()
は継承を考慮に入れる一方で、type()
はそうではありません。
相違点2:複数の型の確認
isinstance()
関数は、第二引数にタプルを取ることができ、その場合、オブジェクトがタプルに含まれるいずれかの型であるかどうかを確認します。一方、type()
関数はこのような機能を持っていません。
num = 123 print(isinstance(num, (int, float))) # True
このコードでは、num
がint
またはfloat
のいずれかであるかを確認します。このような操作はtype()
関数では行えません。
これらの違いを踏まえつつ、どちらの関数を使うべきか、利用するシーンや目的に応じて適切に選択する必要がある点を押さえておきましょう。
Python:データ型判定のまとめ
始めてPythonを勉強するのは結構難しいですよね。
でもその悩みを抱えているのは一人じゃありません。全てのPython使いが同じ道を進んできました。
Pythonをはじめとするプログラミングスキルを武器に、時間と場所に捉われない自由な生き方を目指してみませんか?今すぐ行動したい方は以下の記事をチェック!
読者料典 Python入門:学習カリキュラム ←こちらから!