Ich stoße auf ein Problem, bei dem ich eine Instanz zu einer Gruppe hinzufüge und später teste, um zu sehen, ob das Objekt in dieser Menge existiert oder nicht. Ich habe __eq__()
außer Kraft gesetzt, aber es wird nicht während des Einschlusstests aufgerufen. Muss ich stattdessen __hash__()
überschreiben? Wenn ja, wie würde ich __hash__()
implementieren, da ich das Tupel, die Liste und das Wörterbuch hashen muss?Wie implementiert man __eq__ für den Set-Einschluss-Test?
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"
Vielleicht könnten Sie uns den Komponententest schreiben, von dem Sie erwarten, dass er erfolgreich ist? Ich erhalte 'p1 im Set' mit deinem Code. Soll ich etwas anderes bekommen? – hughdbrown
Hashing veränderbare Objekte ist im Allgemeinen keine gute Idee ... – mgilson
Siehe http://wiki.python.org/moin/DictionaryKeys für warum @mgilson ist richtig. – delnan