int と bool であはん 〜isinstance()の罠〜

これはびっくりした。なのでメモ。

i = 123
isinstance(i, int)
# => True

a = True
isinstance(a, int)
# => True

b = False
isinstance(b, int)
# => True

c = 1
isinstance(c, int)
# => True

d = 0
isinstance(d, int)
# => True

えぇー!

i = 123
isinstance(i, bool)
# => False

a = True
isinstance(a, bool)
# => True

b = False
isinstance(b, bool)
# => True

c = 1
isinstance(c, bool)
# => False

d = 0
isinstance(d, bool)
# => False

ほっ
こっちは大丈夫なのね。

理由は「boolはintのサブクラスだから」だそうです。

参考
bool is instance of int in Python - Peterbe.com (Peter Bengtsson on Python, Zope, Kung Fu, London and photos)
boolはintだった - 路傍のプログラマ

参考先を教えてくれたKuboonに感謝ヽ(・∀・)ノ