Pythonのtypeとisinstanceで型を取得・確認する
- 作成日: 2021-06-03
- 更新日: 2023-12-24
- カテゴリ: Python
Pythonで型を取得・確認する
Pythonではデータの型を取得して確認(判定)することができます。
型の取得と確認にはtypeとisinstance関数を使います。
結論から言うと型の取得は↓のようにします。
typ = type(1)
print(typ)
# <class 'int'>
typ = type('Good')
print(typ)
# <class 'str'>
型の判定は↓のように行います。
if type(1) is int:
print('int型です')
if isinstance('Good', str):
print('str型です')
この記事では型の取得・確認について具体的に↓を見ていきたいと思います。
- 型とは?
- type()による型の取得
- type()による型の判定
- type()による複数の型判定
- 型オブジェクトによるデータの生成
- isinstance()による型の判定
- isinstance()によるサブクラスの判定
- isinstance()による複数の型判定
参考記事
type - 組み込み関数 — Python 3.9.4 ドキュメント
isinstance - 組み込み関数 — Python 3.9.4 ドキュメント
関連記事
頭が悪い人のPythonのevalの使い方
頭がいい人のPythonのexitの使い方
状態遷移による文字列パースのテクニック【Python】
形態素解析で代名詞+助詞+名詞を文章から抜き出す【Python, 自然言語処理, Janome】
在宅・未経験、Pythonで稼ぐ方法は?【取引・宣伝・広告】
型とは?
型とはなんでしょうか。
型とはデータの大きさのことです。
型によってデータの大きさや特性は変わります。
型はデータのそばに寄り添うように立っています。
データが存在する場合、型はかならずそばにいます。つまりデータにとって型とはかけがえのない存在です。
プログラミング言語によってこの型の取り扱いは変わります。
たとえばC/C++などのコンパイラ型の言語の型は、明示的に書きます。
たとえばint abc = 1;
とかstd::string def = "hello";
などのように。
Pythonではこの型の宣言は必要ありません。
これはPythonが動的型付けに分類されるプログラミング言語だからです。
Pythonのデータの型は動的に決定されるので、ほとんどの場合開発者はデータの型を意識しなくても大丈夫です。
しかし、そのデータの裏には、型が顔をのぞかせているのです。
Pythonで型を意識したプログラミングを行いたい場合、今回の記事で紹介するtype
やisinstance
を使うことになります。
これらのクラスや関数を使うことでPythonのデータの型を取得し、確認(判定)することが可能になります。
type()による型の取得
Pythonのデータの型を取得したい場合はtype()
を使用します。
type()
は↓のような構造になっています。
class type(object)
type()
は引数が1つだけの場合は、その引数のオブジェクトの型を返します。
この型のことを型オブジェクトと言います。
型はint
型であれば<class 'int'>
のような形で表現されます。
str
型であれば<class 'str'>
です。
type()
でデータの型を取得するには↓のようにします。
print(type(1))
# <class 'int'>
print(type(True))
# <class 'bool'>
print(type('Hello'))
# <class 'str'>
print(type([1, 2, 3]))
# <class 'list'>
print(type((1, 2, 3)))
# <class 'tuple'>
print(type({'a': 1, 'b': 2}))
# <class 'dict'>
print(type({1, 2, 3}))
# <class 'set'>
print(type(None))
# <class 'NoneType'>
↑の場合、type()
に直接値を渡していますが、もちろん変数も渡すことができます。
var = 1
print(type(var))
# <class 'int'>
type()
の返す型オブジェクトは変数に入れておくことも出来ます。
typ = type(1)
print(typ)
# <class 'int'>
type()による型の判定
type()
による型の判定を行うにはis
演算子と組み合わせます。
型オブジェクトと型オブジェクトを比較して、それが真であれば同じ型、偽であれば違う型になります。
if type(1) is int:
print('int型です')
# int型です
if type('Good') is str:
print('str型です')
# str型です
is not
と組み合わせればその型ではない時に真になります。
if type(1) is not str:
print('str型ではありません')
# str型ではありません
type()による複数の型判定
type()
とin
演算子を組み合わせれば、複数の型と判定を取ることができます。
if type(1) in (int, str):
print('intかstrかのどちらかです')
# intかstrかのどちらかです
if type('Good') in (int, str):
print('intかstrかのどちらかです')
# intかstrかのどちらかです
if type([1, 2, 3]) not in (int, str):
print('intとstrのどちらでもありません')
# intとstrのどちらでもありません
型オブジェクトによるデータの生成
type()
で取得した型オブジェクトは型なので、データから型を取得し、その型からデータを生成するということができます。
intclass = type(1)
print(intclass())
# 0
この特性を使うと、型を知らなくてもオブジェクトのコンストラクタを呼び出して新しいデータを生成するなどの芸当が可能になります。
isinstance()による型の判定
isinstance()
を使うと型の判定を取ることができます。
type()
との違いはisinstance()
はサブクラスのオブジェクトにも判定を取れるということです。
isinstance()
は↓のような構造になっています。
isinstance(object, classinfo)
isinstance()
の第1引数(object
)には判別したいオブジェクトを渡します。
そして第2引数(classinfo
)には型オブジェクトやクラスなどの情報を渡します。
isinstance()
はobject
がclassinfo
のインスタンスまたはサブクラスのインスタンスの場合にTrue
を返します。
print(isinstance(1, int)) # True
print(isinstance(True, bool)) # True
print(isinstance('Good', str)) # True
print(isinstance([1, 2, 3], list)) # True
print(isinstance((1, 2, 3), tuple)) # True
print(isinstance({'a': 1, 'b': 2}, dict)) # True
print(isinstance({1, 2}, set)) # True
isinstance()によるサブクラスの判定
たとえばbool
はint
のサブクラスなので、↓のコードはTrue
になります。
print(isinstance(True, int)) # True
それから↓のようなベースクラスとサブクラスの関係において、isinstance()
は↓のような振る舞いになります。
class Animal:
pass
class Cat(Animal):
pass
cat = Cat()
print(isinstance(cat, Animal)) # True
print(isinstance(cat, Cat)) # True
↑の場合、Cat
はAnimal
のサブクラスです。そのためCat
のオブジェクトとAnimal
をisinstance()
で判定すると結果はTrue
になります。
また当然ながらCat
との判定もTrue
です。
isinstance()による複数の型判定
isinstance()
の第2引数にタプルを渡すと、そのタプル内の型と判定が取れます。
print(isinstance(1, (int, str))) # True
print(isinstance(1, (list, str))) # False
↑の場合、isinstance()
の第1引数がタプル内のいずれかの型である場合にTrue
になります。
いずれの型でもない場合はFalse
になります。
おわりに
今回はPythonの型の取得と確認方法を見てみました。
Pythonの型を意識するとセキュアなプログラミングが可能になるなど嬉しい副作用があります。
うまいこと使うと吉かもしれません。
🦝 < 型にはめてあげる
🐭 < きゅぅ