Pythonで変数の型をisinstance関数でチェックする方法

プログラミング Python

Pythonにもその他の言語(C言語やJava)と同様に変数に型があります。

通常は変数の型を宣言時には明記しませんが、明記して宣言することも可能です。

今回はそのPythonでその変数がどんな型で利用されているのかを「isinstance関数」を使ってチェックする方法です。

スポンサーリンク

Pythonの変数の型をisinstance関数でチェックする

Pythonの変数の型をチェックするには「isinstance関数」を利用して行います。

isinstance関数の使い方
isinstance(チェックする変数, Pythonの型名)

実際のソースは以下のような形になります。

#変数の型チェック
def checkType( obj ):
    if isinstance( obj, bool ) :
        print( '【' + str(obj) + '】はbool型です' )
    elif isinstance(obj, int):
        print( '【' + str(obj) + '】はint型です')
    elif isinstance(obj, map):
        print( '【' + str(obj) + '】はmap型です')
    elif isinstance(obj, float):
        print( '【' + str(obj) + '】はfloat型です')
    elif isinstance(obj, complex):
        print( '【' + str(obj) + '】はcomplex型です')
    elif isinstance(obj, list):
        print( '【' + str(obj) + '】はlist型です')
    elif isinstance(obj, tuple):
        print( '【' + str(obj) + '】はtuple型です')
    elif isinstance(obj, range):
        print( '【' + str(obj) + '】はrange型です')
    elif isinstance(obj, str):
        print( '【' + str(obj) + '】はstr型です')
    elif isinstance(obj, bytes):
        print( '【' + str(obj) + '】はbytes型です')
    elif isinstance(obj, set):
        print( '【' + str(obj) + '】はset型です')
    elif isinstance(obj, frozenset):
        print( '【' + str(obj) + '】はfrozenset型です')
    elif isinstance(obj, dict):
        print( '【' + str(obj) + '】はdict型です')
#    elif isinstance(obj, object):
#        print( '【' + str(obj) + '】はobject型です')   #これを有効にするとすべてobejct型になる
    else :
        print( '【' + str(obj) + '】は型が不明です。')

#クラスのテスト用
class Parent(object):
    def __init__( self ):
        pass
class Child( Parent ):
    def __init__( self ):
        pass

#変数の型チェックを実行する
checkType( True )             #bool型
checkType( 1 )                #int型
checkType( 1.123 )            #float型
checkType( [1, 2, 3] )        #list型
checkType( {100, 200} )       #set型
checkType( {'key': 100} )     #dict型
checkType( ('key','100') )    #tuple型
checkType( 'string' )         #str型
checkType( b'foo' )           #bytes型
checkType( complex(3, 4) )    #complex型
checkType( range( 1, 10, 3 )) #range型
checkType( map( lambda x: x**2, list( range( 10 ))))    #map型
checkType( frozenset([2, 4, 6 ]))  #frozenset型
checkType( Parent() )         #基底クラス
checkType( Child() )          #サブクラス
checkType( None )             #None

上記をPythonで実行すると

【True】はbool型です
【1】はint型です
【1.123】はfloat型です
【[1, 2, 3]】はlist型です
【{200, 100}】はset型です
【{'key': 100}】はdict型です
【('key', '100')】はtuple型です
【string】はstr型です
【b'foo'】はbytes型です
【(3+4j)】はcomplex型です
【range(1, 10, 3)】はrange型です
【<map object at 0x0000017E3FC73CC8>】はmap型です
【frozenset({2, 4, 6})】はfrozenset型です
【<__main__.Parent object at 0x0000017E3FC73CC8>】は型が不明です。
【<__main__.Child object at 0x0000017E3FC73CC8>】は型が不明です。
【None】は型が不明です。

になります。

クラスとNoneは型が規定のものではないので「不明」にしてあります。

まとめ

Pythonの変数の型をチェックするには「isinstance関数」を利用することでクラスなどの独自定義のもを除けば判断が付きます。

Pythonの変数の型
Pythonでは他のプログラミング言語(C言語やJava)などと異なり変数の宣言に「型」は指定しませんが、型がないわけではありません。この記事ではその変数の型について宣言方法を含めてみていきます。

以上、Pythonで変数の型をisinstance関数でチェックする方法でした。

タイトルとURLをコピーしました