Pythonの型判定で isinstance()
を使うと、bool型
がint型
と判定されることがあります。これはPythonのbool型
がint型
のサブクラスとして実装されているためです。
例えば、次のようなコードを考えてみましょう。
def validate(data):
if not isinstance(data['isCompleted'], bool):
return False
return True
この関数は、isCompleted
がbool型
であるかどうかを判定します。しかし、isCompleted
がTrue
またはFalse
である場合、isinstance()
はTrue
を返します。
print(isinstance(True, int)) # True
print(isinstance(False, int)) # True
これは、Pythonのbool型
がint型
のサブクラスであるためです。そのため、isinstance()
を使ってbool型
とint型
を判定すると、予期しない結果を得ることがあります。
この問題を解決するためには、type()
関数を使用することが推奨されます。type()
関数は、オブジェクトの具体的な型を返します。
print(type(True) is int) # False
print(type(False) is int) # False
以上のように、Pythonのisinstance()
関数を使用する際には、bool型
がint型
のサブクラスであることを考慮する必要があります。適切な型判定を行うためには、type()
関数を使用することが推奨されます。