Jua*_*nti 26 python boolean restriction
>>> class BOOL(bool):
...     print "why?"
... 
why?
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: Error when calling the metaclass bases
    type 'bool' is not an acceptable base type
我以为Python信任程序员.
Max*_*keh 48
圭多的看法:
昨晚我想到了这一点,并意识到你根本不应该被允许继承bool!子类只有在有实例时才有用,但仅仅存在bool子类的实例会破坏True和False是bool的唯一实例的不变量!(C的子类的实例也是C的实例.)我认为重要的是不要提供后门来创建额外的bool实例,所以我认为bool不应该是子类.
参考:http://mail.python.org/pipermail/python-dev/2002-March/020822.html
Ale*_*lli 10
由于OP在评论中提到:
我想
1 and 2返回我班级的一个实例.
我认为重要的是要指出这完全是不可能的:Python不允许你改变内置类型(特别是它们的特殊方法).文字1永远是内置式的实例int,并在任何情况下的基本语义and运营商是不可重写反正- a and b是始终一致b if a else a的任何 a和b(不bool涉及强制,即使OP似乎误认为是一个发生).
重申这关键的一点:价值a and b是永远,不变地要么a或b-有没有办法打破这种语义约束(即使a和b是你自己独特的类的实例-就更少了,当然,当他们被限制为Python内置的实例int! - ).
这是一篇解释该决定背后原因的帖子:http: //mail.python.org/pipermail/python-dev/2004-February/042537.html
这个想法是bool有一个特定的目的 - 成为True或将要False添加,只会使你的代码复杂化.
如果您使用的是Python 3,并且希望有一个可以作为布尔值计算的类,但也包含其他功能,请__bool__在您的类中实现.
在Python 2中,通过实现__nonzero__或__len__(如果您的类是容器)可以实现相同的效果.