文法・環境 組み込み関数

【Python】オブジェクトのデータ型の確認方法【type関数、isinstance関数】

Pythonにおいて、オブジェクトのデータ型を判定する方法を紹介します。

本記事では、以下の内容を紹介しています。

この記事で分かること

  • Pythonのデータ型について
  • type( )関数でデータ型を判定する方法
  • isinstance( )関数でデータ型を判定する方法
  • type( )関数と、isinstance( )関数の使い分け

スポンサーリンク

Pythonのデータ型について

はじめに、Pythonのオブジェクトのデータ型について簡単に紹介します。

おもなデータ型は以下のとおりです。

種類データ型説明
数値型整数int小数点なしの数値型num = 100
浮動小数点float小数点ありの数値型num = 1.14
複素数complex虚数単位を j を用いて表すa = 1 + 2j
シーケンス型文字列strシングルクォート「'」もしくは、
ダブルクォート「”」で囲う
fruit = 'Apple'
タプルtuple・( )で定義。
・各要素をカンマ「 , 」で区切る
・要素は変更できない
(1, 2, 3)
リストlist・[ ]で定義。
・各要素をカンマ「 , 」で区切る
・要素は変更可能
[1, 2, 3]
集合型集合set・{ }で定義
・重複する要素は無視される
・要素に順番がない
set1 = {1, 2, 3, 3, 1, 2}
print(set1)
# {1, 2, 3}
マッピング型辞書dict・{ }で定義
・keyとvalueの組み合わせ
price = {"apple":100,
"banana":200,
"orange" : 100}
その他真偽bool・True、False
・1, 0と等価
is_ok = True

Pythonでは、データ型を宣言をしなくても、自動的にデータ型が判断されます。

Pythonのように、自動的にデータ型が決まる言語のことを、動的型付け言語と言います。

動的なデータ型指定は便利な反面、エラーの原因にもなります。

型に関するエラーを避けるためにも、動的型付け言語でもデータ型を意識しながらコードを記述するようにしましょう。

以降、オブジェクトのデータ型を確認・判定する方法を紹介します。

type( )関数でデータ型を判定する方法

type( )関数を用いて、オブジェクトのデータ型を判定する方法を紹介します。

type( )関数は、オブジェクトのデータ型を確認できる、Pythonの組み込み関数です。

以下、type( )関数でデータ型を確認するサンプルコードです。

a = 123
b = 'Apple'
c = True
d = [1,2,3]

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

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

print(type(c))
# <class 'bool'>

print(type(d))
# <class 'list'>

type( )関数の返り値は、type型のオブジェクトが返されます。

これを任意のデータ型と比較することで、オブジェクトのデータ型を判定することができます。

a = 123
b = 'Apple'

print(type(a) is int)
# True

print(type(b) is int)
# False

print(type(a) in (int, str))
# True

in演算子 と タプル・リストを使用することで、複数のデータ型を判定対象にすることもできます。

type( )関数とif文で判定

参考までに、if文と組み合わせる例を紹介します。

以下、サンプルコードです。

def is_int(value) : 
    if type(value) is int :
        print('整数型です')
    else :
        print('整数型ではありません')

        
a = 123
b = 'Apple'

is_int(a)
# 整数型です

is_int(b)
# 整数型ではありません

スポンサーリンク

isinstance( )関数を用いてデータ型を判定

isinstance( )関数を用いて、オブジェクトのデータ型を判定する方法を紹介します。

isinstance( )関数は、第一引数に変数、第二引数に判定したいデータ型のインスタンスを指定します。
データ型にはタプルを指定することもできます。

書き方

isinstance( オブジェクト, 判定したいデータ型 )

以下、isinstance( )関数でデータ型を判定するサンプルコードです。

a = 123
b = 'Apple'

print(isinstance(a, int))
# True

print(isinstance(b, int))
# False

print(isinstance(a, (int, str)))
# True

タプル・リストを使用することで、複数のデータ型を判定対象にすることもできます。

isinstance( )関数とif文で判定

参考までに、if文と組み合わせる例を紹介します。

以下、サンプルコードです。

def is_int(value) : 
    if isinstance(a, int) :
        print('整数型です')
    else :
        print('整数型ではありません')


a = 123
b = 'Apple'

is_int(a)
# 整数型です

is_int(b)
# 整数型ではありません

スポンサーリンク

type( )関数と、isinstance( )関数の使い分け

type( )関数と、isinstance( )関数の使い分けについて紹介します。

type( )関数と、isinstance( )関数では、サブクラスに対する振る舞いが異なります。
・type( )関数で判定:サブクラスの型が一致した場合のみ True
・isinstance( )関数で判定:スーパークラスの型が一致した場合も True

以下、サブクラスに対するtype( )関数とisinstance( )関数の挙動を確認するサンプルコードです。

# スーパークラス
class Parent:
    pass

# サブクラス
class Child(Parent):
    pass


parent_a = Parent()
print(type(parent_a))
# <class '__main__.Parent'>

child_a = Child()
print(type(child_a))
# <class '__main__.Child'>


print(type(child_a) is Parent)
# False

print(type(child_a) is Child)
# True

print(isinstance(child_a, Parent))
# True   
      
print(isinstance(child_a, Child))
# True

isinstance( )関数の場合は、サブクラスのインスタンス(child_a)が、スーパークラスの型(Parent)と一致した場合もTrueとなっています。

クラスの継承関係も含めて判定したい場合は、isinstance関数( )を使用しましょう。

変数やデータ型については、下記の記事で詳しくまとめているので、併せて参考にしてみてください。

【Python】変数の基本まとめ。データ型の種類、変数の命名規則など。

スポンサーリンク

-文法・環境, 組み込み関数
-,