1

我希望分配给一个变量(一个“常量”),一个允许该变量只返回并与自身进行比较True的值。is==

我想避免在我选择的值与其他值发生冲突的情况下分配任意值,例如 anint或其他类型。

我正在考虑生成一个类的实例,该实例id()在值可能支持的任何比较中使用 CPython 值的唯一性。

这里

If no __cmp__(), __eq__()  or __ne__()  operation is defined, class instances are compared by object identity (“address”).

会建议:

MY_CONSTANT = object()

如果以某种方式被垃圾收集,并且在比较期间分配了其他东西(我认为这可能永远不会发生),则只会在与MY_CONSTANTCPython 实现的比较中返回 true 。MY_CONSTANT

4

2 回答 2

1

是的。这是定义唯一常量的好方法。当然,您将任何对象与被定义为等于一切的对象进行比较的风险最小,但如果每个人都玩得相当好,这应该可行。此外,垃圾收集问题不会成为问题,因为如果发生这种情况,您的常量已经消失,并且无法与具有相同 id 的新对象进行比较。

于 2010-02-09T19:20:26.410 回答
0

只要MY_CONSTANT保持在范围内,它引用的对象就不能被垃圾收集。您确实应该始终用于is比较,因为==可以覆盖的行为

于 2010-02-09T19:50:45.017 回答