Wie erreicht man elegante Gleichheitsvergleiche in Python-Klassen?

Mary-Kate Olsen
Freigeben: 2024-11-08 08:44:01
Original
493 Leute haben es durchsucht

How to Achieve Elegant Equality Comparisons in Python Classes?

Elegante Möglichkeiten zur Unterstützung der Gleichheit („Äquivalenz“) in Python-Klassen

Bei der objektorientierten Programmierung ist es oft entscheidend, Gleichheitsprüfungen zwischen Objekten benutzerdefinierter Klassen zu definieren. Python ermöglicht dies durch die Implementierung spezieller Methoden, eq und __ne__, für Äquivalenz- bzw. Ungleichheitsvergleiche.

Ein etablierter Ansatz besteht darin, die dict-Attribute von zu vergleichen zwei Objekte:

class Foo:
    def __init__(self, item):
        self.item = item

    def __eq__(self, other):
        if isinstance(other, self.__class__):
            return self.__dict__ == other.__dict__
        else:
            return False
Nach dem Login kopieren

Betrachten Sie jedoch Folgendes als einfacher Methode:

class Number:

    def __init__(self, number):
        self.number = number

    def __eq__(self, other):
        return isinstance(other, Number) and self.number == other.number
Nach dem Login kopieren

Diese prägnante Methode macht komplexe dict-Vergleiche überflüssig und stellt damit eine elegante Alternative dar.

Darüber hinaus verarbeitet sie Unterklassen nahtlos und gewährleistet so kommutative und Konsistente Gleichheitsprüfungen:

class SubNumber(Number):
    pass

n1 = Number(1)
n2 = Number(1)
n3 = SubNumber(1)
n4 = SubNumber(4)

print(n1 == n2) # True
print(n2 == n1) # True
print(n1 == n3) # True
print(n1 != n4) # True
print(len(set([n1, n2, n3])))  # 1
Nach dem Login kopieren

Um die Lösung zu vervollständigen, ist es wichtig, die zu überschreiben Hash-Methode für konsistentes Hashing und eindeutige Identifizierung:

class Number:

    def __init__(self, number):
        self.number = number

    def __eq__(self, other):
        return isinstance(other, Number) and self.number == other.number

    def __hash__(self):
        return hash(self.number)
Nach dem Login kopieren

Dies behebt Hashing-Probleme, die bei der Verwendung von dict für Gleichheitsvergleiche auftreten, und stellt ein zuverlässiges Mengenverhalten und eine eindeutige Identifizierung von sicher verschiedene Objekte.

Das obige ist der detaillierte Inhalt vonWie erreicht man elegante Gleichheitsvergleiche in Python-Klassen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage