Pythonの型判定で isinstance()
を使うと、bool
型がint
型と判定されることがあります。これはPythonのbool
型がint
型のサブクラスとして実装されているためです。
例えば、次のようなコードを考えてみましょう。
def validate(data):
if not isinstance(data['isCompleted'], bool):
return False
return True
この関数は、data['isCompleted']
がbool
型であるかどうかを判定します。しかし、isinstance()
はbool
型がint
型のサブクラスであるため、data['isCompleted']
がbool
型であってもint
型であってもTrue
を返します。
この問題を解決するためには、type()
関数を使用することが推奨されます。type()
関数は、引数のオブジェクトの型を返します。したがって、上記の関数は次のように書き換えることができます。
def validate(data):
if type(data['isCompleted']) is not bool:
return False
return True
この関数は、data['isCompleted']
がbool
型である場合にのみTrue
を返します。
以上のように、Pythonのisinstance()
関数とbool
型の関係は深く、型判定を行う際には注意が必要です。特に、bool
型とint
型の判定を行う際には、type()
関数を使用することをお勧めします。