Heim > Backend-Entwicklung > Python-Tutorial > Wie kann ich sicherstellen, dass meine Python-Klassen wirklich gleich sind: Ein Leitfaden zu Äquivalenzmethoden

Wie kann ich sicherstellen, dass meine Python-Klassen wirklich gleich sind: Ein Leitfaden zu Äquivalenzmethoden

DDD
Freigeben: 2024-11-08 10:51:01
Original
1009 Leute haben es durchsucht

How Can I Ensure My Python Classes Are Truly Equal: A Guide to Equivalence Methods

Halten Sie Ihre Python-Klassen gleich: Ein umfassender Leitfaden zu Äquivalenzmethoden

In Python sind eq und ne Spezielle Methoden bieten eine bequeme Möglichkeit, Äquivalenz für benutzerdefinierte Klassen zu definieren. Während der grundlegende Ansatz des Vergleichs von __dict__s eine praktikable Option ist, kann es bei Unterklassen und der Interoperabilität mit anderen Typen zu Herausforderungen kommen.

Eine robustere Äquivalenzbehandlung

Um diese zu beheben Einschränkungen, erwägen Sie eine umfassendere Implementierung:

class Number:

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

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

    def __ne__(self, other):
        x = self.__eq__(other)
        if x is not NotImplemented:
            return not x
        return NotImplemented

    def __hash__(self):
        return hash(tuple(sorted(self.__dict__.items())))

class SubNumber(Number):
    pass
Nach dem Login kopieren

Diese Version beinhaltet:

  • Unterklassenbehandlung: Es stellt sicher, dass die Äquivalenz zwischen der Zahlenklasse und ihren Unterklassen ordnungsgemäß überprüft wird.
  • Nichtkommutative Korrektur: Es stellt sicher, dass Gleichheitsvergleiche unabhängig vom Operanden kommutativ sind Reihenfolge.
  • Hash-Überschreibung: Durch die Definition einer benutzerdefinierten Hash-Methode wird sichergestellt, dass Objekte mit demselben Wert denselben Hash-Wert haben, was für Set und entscheidend ist Wörterbuchoperationen.

Validierung und Testen

Um die Robustheit dieses Ansatzes zu überprüfen, finden Sie hier eine Reihe von Behauptungen:

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

assert n1 == n2
assert n2 == n1
assert not n1 != n2
assert not n2 != n1

assert n1 == n3
assert n3 == n1
assert not n1 != n3
assert not n3 != n1

assert not n1 == n4
assert not n4 == n1
assert n1 != n4
assert n4 != n1

assert len(set([n1, n2, n3])) == 1
assert len(set([n1, n2, n3, n4])) == 2
Nach dem Login kopieren

Diese Behauptungen demonstrieren das korrekte Verhalten der Äquivalenzmethoden und die Konsistenz der Hashwerte.

Durch diesen umfassenderen Ansatz können Sie Python-Klassen mit robuster Äquivalenzbehandlung erstellen und so zuverlässige Vergleiche sowie genaue Mengen und Wörterbücher gewährleisten Operationen.

Das obige ist der detaillierte Inhalt vonWie kann ich sicherstellen, dass meine Python-Klassen wirklich gleich sind: Ein Leitfaden zu Äquivalenzmethoden. 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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage