Benutzerdefinierter Gleichheitsvergleich in Python-Objekten
Das Standardverhalten von Python behandelt Objektinstanzen als unterschiedliche Einheiten, auch wenn sie identische Attribute haben. Dieses Verhalten kann problematisch sein, wenn Sie Objekte anhand ihrer internen Eigenschaften und nicht anhand ihrer Objektidentität vergleichen möchten. So passen Sie den Gleichheitsvergleich für Objektinstanzen an:
Definieren der eq-Methode
Um zu steuern, wie Objekte Ihrer benutzerdefinierten Klasse auf Gleichheit verglichen werden , definieren Sie die Methode eq innerhalb der Klassendefinition. Diese Methode benötigt zwei Argumente: self und other. Der self-Parameter bezieht sich auf das aktuelle Objekt, während other das Objekt darstellt, mit dem es verglichen wird.
<code class="python">class MyClass: def __init__(self, foo, bar): self.foo = foo self.bar = bar def __eq__(self, other): if not isinstance(other, MyClass): # Don't compare to unrelated types return NotImplemented return self.foo == other.foo and self.bar == other.bar</code>
Durch die Implementierung von __eq__ definieren Sie im Wesentlichen eine benutzerdefinierte Gleichheitsprüfung für Instanzen Ihrer Klasse. In diesem Beispiel vergleicht die Methode die foo- und bar-Attribute von self und other und gibt True zurück, wenn beide gleich sind.
Konsequenzen der Implementierung von eq
Durch die Implementierung von eq können Instanzen Ihrer Klasse nicht gehasht werden. Das bedeutet, dass sie nicht als Schlüssel in Wörterbüchern oder als Elemente in Mengen verwendet werden können. Dies liegt daran, dass Python auf die Funktion hash() angewiesen ist, um zu bestimmen, ob Objekte hashbar sind, und der Hashwert für ein Objekt aus seinem internen Inhalt abgeleitet wird. Da sich der Inhalt Ihrer Objekte aufgrund der Attributzuweisung ändern kann, können sie nicht zuverlässig gehasht werden.
Wenn Sie einen unveränderlichen Typ modellieren, sollten Sie auch die Hash-Methode implementieren, um die Konsistenz sicherzustellen und vorhersehbares Verhalten bei Verwendung in Sammlungen.
Vermeiden Sie allgemeine Lösungen
Versuchen Es wird nicht empfohlen, eine allgemeine Gleichheitsvergleichsmethode zu definieren, indem dict durchlaufen und Werte verglichen werden. Dieser Ansatz kann Objekte möglicherweise nicht korrekt vergleichen, wenn sie in ihren Wörterbüchern nicht vergleichbare oder nicht hashbare Typen enthalten.
Das obige ist der detaillierte Inhalt vonWie können Sie den Gleichheitsvergleich für Python-Objekte anpassen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!