是否可以在bool类中添加test& set,test& clear?

时间:2015-11-08 15:11:32

标签: python-3.x

(这不是关于原子测试和设置)

我想要的就是能够编写如下代码:

need_cleanup = True
...
if need_cleanup.test_and_clear():
    cleanup()

而不是:

if need_cleanup:
    cleanup()
    need_cleanup = False

恕我直言,这不会破坏布尔类中的任何内容。

尝试添加以:

结尾的方法
  

TypeError:无法设置内置/扩展类型'bool'

的属性

可能与已知的限制有关,bool类不能被子类化,但我不想将其子类化。

有办法吗?

编辑:我想我已经得到了答案。这是不可能的,因为bool是不可变的。从False切换到True(反之亦然)将bool对象替换为分别与TrueFalse常量相同的新对象。显然,调用方法不能这样做。禁止的子类只是引起了我的注意......

1 个答案:

答案 0 :(得分:0)

你不能。

  

昨晚我想到了这一点,并意识到你根本不应该被允许继承bool!子类只有在有实例时才有用,但仅仅存在bool子类的实例会破坏True和False是bool的唯一实例的不变量! (C的子类的实例也是C的实例。)我认为重要的是不要提供后门来创建额外的bool实例,所以我认为bool不应该是子类。    - Guido van Rossum

简而言之,您不能向基元添加属性,但您可以将它们子类化(除非您不能)。