【Python】type関数とisinstance関数を3分でマスターする

Python

Pythonで変数やクラスなどのオブジェクトのデータ型を調べる際に利用するtype関数とisinstance関数について、3分ぐらいでザックリ解説します。

Pythonは動的型付け言語であるため、処理の前にデータ型を判定しておく必要がある場合が多々存在します。

その中心的な役割を担うのが、type関数でありisinstance関数です。ここでは、 type関数とisinstance関数お処理内容と使い方・使い分けを説明します。

このページで学べる内容
  • type関数の使い方
  • isinstance関数の使い方
  • type関数/isinstance関数の使い分け

Pythonエンジニアであれば知らないと恥ずかしい基本知識ばかりです。是非最後までご覧ください。

スポンサーリンク
スポンサーリンク

前提:データ型を判定する必要性

Pythonは、動的型付け言語に分類されるプログラミング言語のため、データ型の判定が重要です。

例えば、変数Aと変数Bを加算しようとしたときに、どちらか一方が文字列だったりするとエラーになってしまいます。

同じ変数に、文字列も数字も入れることができる言語だからこそ、事前にデータ型を判定し必要に応じて、明示的にデータ型を変換してあげる必要があるのです。

type関数もisinstance関数も、そのデータ型を判定する組み込み関数の1つ。

どのように使うのか?使い方の注意点は?という疑問に、次の章でお答えします。

動的型付け言語

①オブジェクトのデータ型が自動的に付与される
②同じオブジェクトに異なるデータ型の値を再代入しても自動的にデータ型が変換される

Python:type関数

まずは、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関数同様オブジェクトのデータ型を判定します。

isinstance関数:構文ルール

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

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から体系立てて学ぶことで短時間・かつ効率的にスキルハックすることが可能です。

各プログラミングスクールの特徴をまとめた記事をこちらに記載しておきますので、是非ご覧ください。

タイトルとURLをコピーしました