答案是可以的,您需要重新定义
__hash__():
>>> class A(object):... def __init__(self, data=''):... self.data = data... def __eq__(self, another):... return hasattr(another, 'data') and self.data == another.data... def __hash__(self):... return hash(self.data)... >>> a1, a2, a3 = A('foo'), A('foo'), A('bar')>>> d = {a1: 'foo'}>>> d[a1]'foo'>>> d[a2]'foo'>>> d[a3]Traceback (most recent call last): File "", line 1, in KeyError: __main__.A object at 0x927d0>如另一条注释中所述,默认实现
__hash__只是简单的标识,因此,如果要使其更复杂,则需要显式定义。



