Pythonで変数やクラスなどのオブジェクトのデータ型を調べる際に利用するtype関数とisinstance関数について、3分ぐらいでザックリ解説します。
Pythonは動的型付け言語であるため、処理の前にデータ型を判定しておく必要がある場合が多々存在します。
その中心的な役割を担うのが、type関数でありisinstance関数です。ここでは、 type関数とisinstance関数お処理内容と使い方・使い分けを説明します。
Pythonエンジニアであれば知らないと恥ずかしい基本知識ばかりです。是非最後までご覧ください。
前提:データ型を判定する必要性
Pythonは、動的型付け言語に分類されるプログラミング言語のため、データ型の判定が重要です。
例えば、変数Aと変数Bを加算しようとしたときに、どちらか一方が文字列だったりするとエラーになってしまいます。
同じ変数に、文字列も数字も入れることができる言語だからこそ、事前にデータ型を判定し必要に応じて、明示的にデータ型を変換してあげる必要があるのです。
type関数もisinstance関数も、そのデータ型を判定する組み込み関数の1つ。
どのように使うのか?使い方の注意点は?という疑問に、次の章でお答えします。
①オブジェクトのデータ型が自動的に付与される
②同じオブジェクトに異なるデータ型の値を再代入しても自動的にデータ型が変換される
Python:type関数
まずは、type関数の使い方から解説します。
type(オブジェクト)
データ型判定をしたいオブジェクトを引数に指定するだけ。
a = 1 b = "Hello World" c = ["あいうえお","かきくえこ","さしすせそ"] print(type(a)) # aのデータ型をプリント print(type(b)) # bのデータ型をプリント print(type(c)) # cのデータ型をプリント # <class 'int'> # <class 'str'> # <class 'list'>
それぞれ、int型(数字)・str型(文字列)・list型(配列)などとデータ型が返されている様子が分かります。
Python:isinstance関数
isinstnance関数も、type関数同様オブジェクトのデータ型を判定します。
isinstnace(オブジェクト,クラス)
isinstance関数は 1 番目の引数に指定したオブジェクトが 2 番目の引数に指定したデータ型と等しいかどうかを判定します。
a = 1 b = "Hello World" c = 100 print(isinstance(a,int)) print(isinstance(b,str)) print(isinstance(c,str)) # True # True # False
2つ目引数には、タプル型のオブジェクトを指定することも可能です。
c = 100 # 変数cが「str型」か「int型」であれば結果はTrue print(isinstance(c,(str,int))) # True
指定したデータ型と1つでも一致すれば、Trueが返ってきます。
type関数とisinstance関数の使い分け
type関数もisinstnace関数もデータ型判定をする関数なのですが、1つだけ判定結果が異なります。
それは、instance関数が親クラスとの比較を行う場合にもTrueを返す点です。
簡単に、クラスとサブクラスを作ってみます。
class Parent(object): pass class Child(Parent): pass
クラスについて1から学習したい方はこちらのページをご覧ください。
2つのクラス「Parent」と「Child」のデータ型を判定してみたいと思います。
まずは、type関数から、
class Parent(object): pass class Child(Parent): pass ins1 = Child() print(type(ins1) == Parent) # 親クラスと比較 print(type(ins1) == Child) # 子クラスと比較 # 結果 False True
同じ比較をisinstance関数で比較します。
class Parent(object): pass class Child(Parent): pass ins1 = Child() print(isinstance(ins1,Parent)) # 親クラスと比較 print(isinstance(ins1,Parent)) # 子クラスと比較 # 結果 True True
この部分だけ、判定結果が異なるため、type関数とisinstanceを使い分ける際に注意が必要です。
Pythonを1から学習したい方は
Pythonをより実践的に学びたい―。実際にコーディングをしながら学びたい―。独学に限界を感じている―。
そんな方には、無料体験/オンライン完結もあるプログラミングスクールで学ぶのがおすすめです。都度検索しながら知識を補完していくのではなく、1から体系立てて学ぶことで短時間・かつ効率的にスキルハックすることが可能です。
各プログラミングスクールの特徴をまとめた記事をこちらに記載しておきますので、是非ご覧ください。