有人能给我解释为什么 isinstance()
在以下情况下返回 True 吗?在编写代码时,我预计会出现 False。
print isinstance(True, (float, int))
True
我的猜测是它的 Python 的内部子类化,作为零和一 - 无论是 float 还是 int - 都在用作布尔值时进行评估,但不知道确切原因。
解决这种情况的最pythonic方法是什么?我可以使用 type()
但在大多数情况下,这被认为不那么 pythonic。
原文由 jake77 发布,翻译遵循 CC BY-SA 4.0 许可协议
For historic reasons,
bool
is a subclass ofint
, soTrue
is an instance ofint
. (最初,Python 没有 bool 类型,返回真值的东西返回 1 或 0。 当他们添加bool
时,True 和 False 必须尽可能地替代 1 和 0向后兼容性,因此子类化。)“解决”这个问题的正确方法完全取决于您认为问题是什么。
True
不再是int
,好吧,太糟糕了。那不会发生。float
或int
的对象,拒绝子类,你可以这样做: