Heim  >  Artikel  >  Backend-Entwicklung  >  Wie können Sie den Gleichheitsvergleich für Python-Objekte anpassen?

Wie können Sie den Gleichheitsvergleich für Python-Objekte anpassen?

DDD
DDDOriginal
2024-11-03 09:16:29212Durchsuche

How Can You Customize Equality Comparison for Python Objects?

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn