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に感謝ヽ(・∀・)ノ