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】変数の基本まとめ。データ型の種類、変数の命名規則など。
スポンサーリンク