为什么bool是int的子类?

时间:2011-11-17 14:43:37

标签: python boolean

当通过python-memcached在memcached中存储bool时,我注意到它以整数形式返回。检查库的代码向我显示,有一个地方检查isinstance(val, int)以将值标记为整数。

所以我在python shell中测试了它并发现了以下内容:

>>> isinstance(True, int)
True
>>> issubclass(bool, int)
True

但为什么bool确实是int的子类?

这有点意义,因为布尔值基本上是一个int,它只能取两个值,但它需要比实际整数少得多的操作/空间(没有算术,只有一点存储空间).... / p>

3 个答案:

答案 0 :(得分:90)

来自对http://www.peterbe.com/plog/bool-is-int的评论

  

如果你在bool类型的时候出现,这是完全合乎逻辑的   添加到python(大约2.2或2.3)。

     

在引入实际bool类型之前,0和1是   官方代表真值,类似于C89。避免   不必要的打破非理想但工作的代码,新的bool类型   需要像0和1一样工作。这不仅仅是真值,   但所有积分操作。没有人会建议使用布尔值   导致数字上下文,大多数人也不建议测试   平等确定真值,没有人想找出困难   这种方式现有的代码是多少。因此做出决定   真假伪装分别为1和0。这仅仅是一个   语言演变的历史人物。

这个很好的解释可以归功于dman13。

答案 1 :(得分:25)

PEP 285 -- Adding a bool type。相关段落:

  

6)bool应该从int继承吗?

     

=>是。

     

在一个理想的世界中,bool可能会更好地实现为      单独的整数类型,知道如何执行混合模式      算术。但是,从int继承bool可以简化      实现极大(部分原因是所有调用的C代码)      PyInt_Check()将继续工作 - 这将返回true      int的子类。

答案 2 :(得分:0)

还可以使用help检查控制台中的Bool值:

帮助(真)

help(True)
Help on bool object:
class bool(int)
 |  bool(x) -> bool
 |  
 |  Returns True when the argument x is true, False otherwise.
 |  The builtins True and False are the only two instances of the class bool.
 |  The class bool is a subclass of the class int, and cannot be subclassed.
 |  
 |  Method resolution order:
 |      bool
 |      int
 |      object
 |  

帮助(假)

help(False)
Help on bool object:
class bool(int)
 |  bool(x) -> bool
 |  
 |  Returns True when the argument x is true, False otherwise.
 |  The builtins True and False are the only two instances of the class bool.
 |  The class bool is a subclass of the class int, and cannot be subclassed.
 |  
 |  Method resolution order:
 |      bool
 |      int
 |      object