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
Diese Version beinhaltet:
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
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!