Pythonのisinstance()とtype()関数の違いと使い方を徹底解説
この記事では、Python 3.x(およびそれ以前のバージョン)で利用できる isinstance() 関数と type() 関数について詳しく解説します。これらの関数は、オブジェクトの型や参照関係を確認する際に非常に役立つ基本的なツールです。
isinstance() メソッドとは
構文
isinstance(object_entity, comparison_equivalent)
戻り値:第1引数のオブジェクトが、第2引数で指定した型(または型のタプル)と一致する場合は True、一致しない場合は False を返します。
それでは、isinstance() の実際の動作を見てみましょう。
例1:クラスインスタンスの判定
class Test:
var = 786
TestInstance = Test()
print(isinstance(TestInstance, Test))
print(isinstance(TestInstance, (list, tuple)))
print(isinstance(TestInstance, (list, tuple, Test)))出力結果
True False True
1行目と3行目が True を返しているのは、TestInstance の参照が Test クラスと一致しているためです。一方、2行目は list や tuple のどちらとも一致しないため False となります。
このように、第2引数には複数の型をタプルとして渡すことも可能です。タプル内のいずれか1つでも一致すれば True が返されます。
次に、組み込みデータ型を使った別の例を見てみましょう。
例2:リストと辞書の判定
Test = [1, 2, 3] result = isinstance(Test, list) print(Test, 'list:', result) result = isinstance(Test, dict) print(Test, 'dict:', result) result = isinstance(Test, (dict, list)) print(Test, 'dict or list:', result)
出力結果
[1, 2, 3] list: True [1, 2, 3] dict: False [1, 2, 3] dict or list: True
Test がリストのインスタンスである場合には True が表示され、そうでない場合には False が表示されます。タプルで複数の型を指定した場合も、リストに一致した時点で True が返されている点に注目してください。
type() メソッドとは
構文
type(entity)
戻り値:引数として渡されたオブジェクトの型を返します。
続いて、type() の動作を確認してみましょう。
例3:各データ型の取得
Dictinp = {1: 'Tutorial', 2: 'Point'}
print(type(Dictinp))
Listinp = ['t', 'u', 't']
print(type(Listinp))
Tupleinp = ('Tut', 'orial', 'Point')
print(type(Tupleinp))出力結果
<class 'dict'> <class 'list'> <class 'tuple'>
出力には、メソッド呼び出し時に渡されたオブジェクトそれぞれの型が表示されています。この結果は、比較演算や条件分岐の中でもそのまま活用できます。
次に、条件分岐で type() を使う例を見てみましょう。
例4:条件分岐での型比較
Listinp = ['t', 'u', 't']
Tupleinp = ('Tut', 'orial', 'Point')
if type(Listinp) is not type(Tupleinp):
print("Type mismatch")
else:
print("Type match")出力結果
Type mismatch
リストとタプルは異なるデータ型であるため、「Type mismatch(型が一致しない)」と表示されます。このように type() を使えば、2つのオブジェクトが同じ型かどうかを簡単に判定できます。
まとめ
この記事では、Python 3.xにおける type() と isinstance() の実装方法と使い分けについて学びました。isinstance() は継承関係も考慮した柔軟な型チェックに適しており、type() は厳密な型の取得・比較に向いています。用途に応じて両者を使い分けることで、より堅牢なPythonコードを書くことができるでしょう。
-
Pythonで変数が文字列型(str)かどうかを判定する方法
isinstance()関数を使った文字列型の判定Pythonでは、組み込み関数 isinstance(var, class) を使うことで、変数 var が指定したクラスのインスタンスであるかどうかを簡単に確認できます。変数が文字列型かどうかを判定したい場合も、この関数を使うのが最も一般的で推奨される方法です。Python 2.x の場合Python 2.x では、str(バイト文字列)と unicode の両方の基底クラスとして basestring が定義されています。そのため、basestring を使えば、どちらの文字列型にも対応した判定が可能です。>>> s =
-
Pythonのデータ型と型変換をわかりやすく解説
この記事では、Pythonにおける主要なデータ型の種類と、それぞれの使い方、そしてデータ型同士を変換する方法について詳しく解説します。 Pythonの組み込みデータ型一覧 Pythonでは変数を作成・宣言する際に、さまざまなデータ型を持たせることができます。Pythonには以下のような組み込みデータ型が用意されています。 str(文字列) int、float、complex(数値) list、tuple(シーケンス) dict(辞書) set(集合) bool(ブール値) bytes、bytearray(バイナリ) それでは、各データ型の特徴と作成方法を順番に見ていきましょう。 文字列型: