设置“入"运算符:使用相等还是恒等?
问题描述
class A(object):
def __cmp__(self):
print '__cmp__'
return object.__cmp__(self)
def __eq__(self, rhs):
print '__eq__'
return True
a1 = A()
a2 = A()
print a1 in set([a1])
print a1 in set([a2])
为什么第一行打印 True,而第二行打印 False?并且两者都没有进入运算符 eq?
Why does first line prints True, but second prints False? And neither enters operator eq?
我正在使用 Python 2.6
I am using Python 2.6
解决方案
需要定义__hash__
也是.例如
You need to define __hash__
too. For example
class A(object):
def __hash__(self):
print '__hash__'
return 42
def __cmp__(self, other):
print '__cmp__'
return object.__cmp__(self, other)
def __eq__(self, rhs):
print '__eq__'
return True
a1 = A()
a2 = A()
print a1 in set([a1])
print a1 in set([a2])
会按预期工作.
作为一般规则,只要您实施 __cmp__
你应该实现一个 __hash__
使得对于所有 x
和 y
使得 x == y
, x.__hash__() == y.__hash__()
.
As a general rule, any time you implement __cmp__
you should implement a __hash__
such that for all x
and y
such that x == y
, x.__hash__() == y.__hash__()
.
相关文章