Występuje problem polegający na dodawaniu instancji do zestawu, a następnie testowaniu w celu sprawdzenia, czy ten obiekt istnieje w tym zestawie. Zastąpiłem numer __eq__()
, ale nie został on wywołany podczas testu integracji. Czy zamiast tego muszę zastąpić __hash__()
? Jeśli tak, to jak zaimplementować __hash__()
, biorąc pod uwagę, że muszę mieszać krotkę, listę i słownik?Jak wdrożyć __eq__ dla zestawu testu integracji?
class DummyObj(object):
def __init__(self, myTuple, myList, myDictionary=None):
self.myTuple = myTuple
self.myList = myList
self.myDictionary = myDictionary
def __eq__(self, other):
return self.myTuple == other.myTuple and \
self.myList == other.myList and \
self.myDictionary == other.myDictionary
def __ne__(self, other):
return not self.__eq__(other)
if __name__ == '__main__':
list1 = [1, 2, 3]
t1 = (4, 5, 6)
d1 = { 7 : True, 8 : True, 9 : True }
p1 = DummyObj(t1, list1, d1)
mySet = set()
mySet.add(p1)
if p1 in mySet:
print "p1 in set"
else:
print "p1 not in set"
Może mógłbyś napisać test jednostkowy dla nas, który spodziewałbyś się osiągnąć sukces? Dostaję 'p1 w zestawie' z twoim kodem. Czy powinienem dostać coś innego? – hughdbrown
hashing zmienne obiekty nie jest dobrym pomysłem ... – mgilson
Zobacz http://wiki.python.org/moin/DictionaryKeys, dlaczego @mgilson ma rację. – delnan