オブジェクトのセットがあり、そのセットから特定のオブジェクトを取得することに興味があります。いくつかの調査の後、私はここで提供されるソリューションを使用することにしました:http: //code.activestate.com/recipes/499299/
問題は、それが機能していないように見えることです。
私はそのように定義された2つのクラスを持っています:
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
注:これら2つのクラスの同等性は、属性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__
メソッドが呼び出されない理由はありますか?うまくいけば、これは質問があまりにも曖昧ではありません。