【Python】isinstance()でオブジェクトの型判定を行う!
Pythonのisinstance()を使用すると、オブジェクトの型判定を行うことができます。
isinstance()とは指定したオブジェクトとクラスの結果を返す関数であり、指定したオブジェクトが指定したクラスなのかどうかをTrueかFalseで判定を行います。
その為、計算処理などを行う前の型チェックとしてisinstance()を使うととても便利です。
しかし、bool型をint型と判定するなどisinstance()仕様によって期待に沿わない場合がありますので注意してください。
今回はPythonのisinstance()でオブジェクトの型判定を行う方法について以下の内容で解説していきます。
⚫︎ プリミティブの型判定を行う場合
⚫︎ イテレータの型判定を行う場合
⚫︎ クラスの型判定を行う場合
⚫︎ isinstance()はbool型をint型と判定する
⚫︎ isinstance()の実践的な使い方
目次
isinstance()とは
isinstance()とは、オブジェクトの型の判定を真偽値で返す関数となります。
isinstance()の書き方
isinstance()の書き方は下記となります。
1 |
isinstance(オブジェクト,クラス) |
isinstance()のパラメータ
⚫︎ オブジェクト:
型の判定を行いたいオブジェクトを指定する
⚫︎ クラス:
指定したオブジェクトのクラス名を指定する
isinstance()のパラメータにオブジェクトとクラスを指定することで、指定したオブジェクトが指定したクラス(型)かどうかを判定し、TrueやFalseの真偽値で返します。
オブジェクトの型判定を行うサンプルコード
isinstance()でオブジェクトの型判定を行うサンプルコードを紹介します。
プリミティブの型判定を行う場合
isinstance()でプリミティブの型の判定を行ってみます。
例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
print('isinstqnce()でプリミティブの型を判定する') print(・string型かどうか判定) sample1 = '文字列' print(sample1) sample1_redult = isinstance(sample1,str) print('結果', sample1_redult) print(・intt型かどうか判定) sample2 = 14 print(sample2) sample2_redult = isinstance(sample2, int) print('結果', sample2_redult) print(・float型かどうか判定) sample3 = 14.6 print(sample3) sample3_redult = isinstance(sample3, float) print('結果', sample3_redult) print(・bool型かどうか判定) sample4 = True print(sample4) sample4_redult = isinstance(sample4, bool) print('結果', sample4_redult) print(・int型かどうか判定) sample5 = '文字列2' print(sample5) sample5_redult = isinstance(sample5, int) print('結果', sample5_redult) |
出力結果
isinstqnce()でプリミティブの型を判定する
・string型かどうか判定
文字列
結果 True
・int型かどうか判定
14
結果 True
・float型かどうか判定
14.6
結果 True
・bool型かどうか判定
True
結果 True
・int型かどうか判定
文字列2
結果 False
isinstance()でプリミティブな型を判定しています。
イテレータの型判定を行う場合
isinstance()でイテレータの型の判定を行ってみます。
例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
print('isinstance()でイテレータの型を判定する') print('・リストかどうかを判定する') list1 = ['値1', '値2', '値3', '値4', '値5'] print(list1) list1_redult = isinstance(list1, list) print('結果', list1_redult) print('・タプルかどうかを判定する') tuple1 = ('値1', '値2', '値3', '値4', '値5') print(tuple1) tuple1_redult = isinstance(tuple1, tuple) print('結果', tuple1_redult) print('・辞書かどうかを判定する') dict1 = {1:'値1', 2:'値2', 3:'値3', 4:'値4', 5:'値5'} print(dict1) dict1_redult = isinstance(dict1, dict) print('結果',dict1_redult) print('・setかどうかを判定する') set1 = {'値1', '値2', '値3', '値4', '値5'} print(set1) set1_redult = isinstance(set1, set) print('結果', set1_redult) print('・frozensetかどうかを判定する') fset1 = frozenset({'値1', '値2', '値3', '値4', '値5'}) print(fset1) fset1_redult = isinstance(fset1, frozenset) print('結果', fset1_redult) print('・タプルかどうかを判定する') list2 = ['値1', '値2', '値3', '値4', '値5'] print(list2) list2_redult = isinstance(list2, tuple) print('結果', list2_redult) |
出力結果
isinstance()でイテレータの型を判定する
・リストかどうかを判定する
[‘値1’, ‘値2’, ‘値3’, ‘値4’, ‘値5’]
結果 True
・タプルかどうかを判定する
(‘値1’, ‘値2’, ‘値3’, ‘値4’, ‘値5’)
結果 True
・辞書かどうかを判定する
{1: ‘値1’, 2: ‘値2’, 3: ‘値3’, 4: ‘値4’, 5: ‘値5’}
結果 True
・setかどうかを判定する
{‘値4’, ‘値3’, ‘値2’, ‘値1’, ‘値5’}
結果 True
・frozensetかどうかを判定する
frozenset({‘値2’, ‘値4’, ‘値1’, ‘値5’, ‘値3’})
結果 True
・タプルかどうかを判定する
[‘値1’, ‘値2’, ‘値3’, ‘値4’, ‘値5’]
結果 False
isinstance()でイテレータの型を判定しています。
クラスの型判定を行う場合
isinstance()でクラスの型の判定を行ってみます。
例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
class ParentClass(): pass class ChildClass(ParentClass): pass instance1 = ChildClass() print('isinstance()でクラスの型を判定') print('・親クラスと同じか判定') instance1_result1 = isinstance(instance1,ParentClass) print('結果', instance1_result1) print('・子クラスと同じか判定') instance1_result2 = isinstance(instance1,ChildClass) print('結果', instance1_result2) |
出力結果
isinstance()でクラスの型を判定
・親クラスと同じか判定
結果 True
・子クラスと同じか判定
結果 True
isinstance()でクラスの型を判定しています。
isinstance()はbool型をint型と判定する
これは、isinstance()の仕様になりますが、bool型の値に対してintで判定してしまうと「True」を返してしまいます。
例
1 2 3 4 5 6 7 |
print('isinstance()で型の判定を行う') print('・bool型かどうか判定') sample1 = True print(sample1) sample1_redult = isinstance(sample1, int) print('結果', sample1_redult) |
出力結果
isinstance()で型の判定を行う
・bool型かどうか判定
True
isinstance()の実践的な使い方
isinstance()の実践的な使い方について紹介してきます。
次のコードは引数の値を使って計算を行うプログラムになります。
例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
def moldJudge(x, y, z): result1 = isinstance(x, int) result2 = isinstance(x, int) if result1 and result2: print('計算処理を行う。') if z == '+': answer = x + y elif z == '-': answer = x - y elif Z == '×': answer = x * y elif z == '÷': answer = x / y print('計算結果', answer) else: print('エラー発生') print('・整数の計算を行う') val1 = moldJudge(12, 35, '+') val2 = moldJudge(56, 35, '-') print('・整数の計算を行う(エラー発生時)') val3 = moldJudge('文字列', 35, '+') |
出力結果
・整数の計算を行う
計算処理を行う。
計算結果 47
計算処理を行う。
計算結果 21
・整数の計算を行う(エラー発生時)
エラー発生
計算を行う前に引数がint型であるかどうかをisinstance()で型判定を行っています。
そうすることで、計算処理を行う前にバグのチェックを防ぐことができますので、ボタンなどを押して入力された値を使って計算処理を行う場合は事前にisinstance()で型チェックを行うようにしましょう。
今回のポイント
isinstance()で型判定を行う
Pythonで型の判定を行うにはisinstance()を使用する。
⚫︎ isinstance()のパラメータにはオブジェクトとクラスを指定する
⚫︎ isinstance()はプリミティブやイテレータ、クラスの型判定を行うことができる
(一致すればTrue、一致しなければFalseを返す)
⚫︎ isinstance()はbool型をint型と判定してしまう
(isinstance()の仕様の為)
関連記事
Pythonのtype()でオブジェクトの型の判定を行う方法について詳しく知りたい場合はこちらをご参考ください。
ST
株式会社flyhawkのSTです。フライテックメディア事業部でのメディア運営・ライター業務なども担当。愛機はMac Book AirとThinkPad。好きな言語:swift、JS系(Node.js等)。好きなサーバー:AWS。受託開発やプログラミングスクールの運営をしております。ご気軽にお問い合わせください。