请看以下示例:
>>> class C(object):
... def __init__(self, p):
... self.p = p
... def __eq__(self, o):
... return True
...
>>> C(1) is C(2)
False
>>> C(1) == C(2)
True
>>> C(1) != C(2)
True # <- Why?!?
Run Code Online (Sandbox Code Playgroud)
所以现在这两个对象是相同的,并且不是同等的.我虽然这两个行动是对立的?!
Jos*_*Lee 27
Python的"数据模型"解释了这一切:
比较运算符之间没有隐含的关系.事实
x==y并非暗示这x!=y是错误的.因此,在定义时__eq__(),还应该定义__ne__()操作符将按预期运行.
在C(1) != C(2),它使用默认实现,其中对象仅与自身相等并且与其他所有内容不相等.
定义__cmp__可以更简单,因为它被用作所有比较操作的后备,而不仅仅是其中一些:
... def __cmp__(self, o):
... return 0
>>> C(1) != C(2)
False
Run Code Online (Sandbox Code Playgroud)
有一个单独的函数,!=它__ne__被隐式定义以比较实例成员.
你想要做的是:
def __ne__(self, other):
return not self.__eq__(other)
Run Code Online (Sandbox Code Playgroud)
或者这个的一些变体.
| 归档时间: |
|
| 查看次数: |
4416 次 |
| 最近记录: |