我有一组对象,并且有兴趣从集合中获取特定对象。经过一番研究,我决定使用这里提供的解决方案:http: //code.activestate.com/recipes/499299/
问题是它似乎不起作用。
我有两个这样定义的类:
class Foo(object):
def __init__(self, a, b, c):
self.a = a
self.b = b
self.c = c
def __key(self):
return (self.a, self.b, self.c)
def __eq__(self, other):
return self.__key() == other.__key()
def __hash__(self):
return hash(self.__key())
class Bar(Foo):
def __init__(self, a, b, c, d, e):
self.a = a
self.b = b
self.c = c
self.d = d
self.e = e
注意:这两个类的相等性应该只定义在属性 a、b、c 上。
http://code.activestate.com/recipes/499299/中的包装器_CaptureEq
也定义了自己的方法。问题是这个方法永远不会被调用(我认为)。考虑,__eq__
bar_1 = Bar(1,2,3,4,5)
bar_2 = Bar(1,2,3,10,11)
summary = set((bar_1,))
assert(bar_1 == bar_2)
bar_equiv = get_equivalent(summary, bar_2)
bar_equiv.d
应该等于 4,同样bar_equiv .e
应该等于 5,但它们不是。就像我提到的那样,执行__CaptureEq
__eq__
语句时似乎没有调用该方法bar_2 in summary
。
是否有某些原因导致该__CaptureEq
__eq__
方法未被调用?希望这不是一个太晦涩难懂的问题。