(这不是关于原子测试和设置)
我想要的就是能够编写如下代码:
need_cleanup = True
...
if need_cleanup.test_and_clear():
cleanup()
而不是:
if need_cleanup:
cleanup()
need_cleanup = False
恕我直言,这不会破坏布尔类中的任何内容。
尝试添加以:
结尾的方法TypeError:无法设置内置/扩展类型'bool'
的属性
可能与已知的限制有关,bool类不能被子类化,但我不想将其子类化。
有办法吗?
编辑:我想我已经得到了答案。这是不可能的,因为bool是不可变的。从False
切换到True
(反之亦然)将bool对象替换为分别与True
或False
常量相同的新对象。显然,调用方法不能这样做。禁止的子类只是引起了我的注意......
答案 0 :(得分:0)
你不能。
昨晚我想到了这一点,并意识到你根本不应该被允许继承bool!子类只有在有实例时才有用,但仅仅存在bool子类的实例会破坏True和False是bool的唯一实例的不变量! (C的子类的实例也是C的实例。)我认为重要的是不要提供后门来创建额外的bool实例,所以我认为bool不应该是子类。 - Guido van Rossum
简而言之,您不能向基元添加属性,但您可以将它们子类化(除非您不能)。