hinzufügen von Objekten in python set Sammlung und Bestimmung von Objekt-Attribut
Ich habe eine Person
Klasse wie folgt aus:
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
def __repr__(self):
return '<Person {}>'.format(self.name)
Möchte ich hinzufügen, dass einige Instanzen dieser Klasse, um einen Satz wie diesen:
tom = Person('tom', 18)
mary = Person('mary', 22)
mary2 = Person('mary2', 22)
person_set = {tom, mary, mary2}
print(person_set)
# output: {<Person tom>, <Person mary>, <Person mary2>}
Wie Sie sehen können, gibt es 2 Marys in der Gruppe. Wie kann ich es so machen, dass Person
Instanzen mit dem gleichen Alter sind als die gleiche person, und nur Hinzugefügt, um das set einmal?
In anderen Worten, wie bekomme ich ein Ergebnis von {<Person tom>, <Person mary>}
?
- So, als Beispiel,
Frank, age 19
wäre das gleiche wieHeather, age 19
wenn Sie nur der Vergleich von Alter? - ja,nur die erste, Hinzugefügt werden, in der festgelegt wird, gespeichert werden
- dann brauchen Sie ein Wörterbuch mit dem Alter als Schlüssel, Person-Objekt als Wert.
- ich denke, er braucht einfach ein
__hash__
umgesetzt.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn ein neues Objekt Hinzugefügt wird, eine python gesetzt ist, wird der hash-code des Objekts wird zuerst berechnet und dann, wenn ein oder mehrere Objekte mit dem gleichen hash-code ist/sind bereits im set, diese Objekte werden getestet, für die Gleichstellung mit dem neuen Objekt.
Im Ergebnis bedeutet dies, dass Sie implementieren müssen, um die
__hash__(...)
und__eq__(...)
Methoden der Klasse. Zum Beispiel:Sollten Sie allerdings überlegen Sie sehr genau, was die korrekte Umsetzung der
__hash__
und__eq__
sollte für Ihre Klasse. Das obige Beispiel funktioniert, ist aber nicht unsinnige (z.B., dass beide__hash__
und__eq__
definiert sind, nur in Bezug auf das Alter).