Elegante Möglichkeiten, Äquivalenz ("Gleichheit") in Python-Klassen zu unterstützen

Beim schreiben von benutzerdefinierten Klassen ist es oft wichtig, dass die Gleichwertigkeit durch die == und != Betreiber. In Python, möglich wird dies durch die Umsetzung der __eq__ und __ne__ spezielle Methoden, beziehungsweise. Der einfachste Weg, die ich gefunden habe, um dies zu tun, ist die folgende Methode:

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

    def __ne__(self, other):
        return not self.__eq__(other)

Kennen Sie mehr elegante Art, dies zu tun? Kennen Sie eine insbesondere Nachteile bei der Verwendung der oben genannten Methode zu vergleichen __dict__s?

Hinweis: Ein wenig Klarstellung-wenn __eq__ und __ne__ sind nicht definiert, Sie finden dieses Verhalten:

>>> a = Foo(1)
>>> b = Foo(1)
>>> a is b
False
>>> a == b
False

Dass a == b ausgewertet False weil es wirklich läuft a is b eine Prüfung der Identität (D. H., "Ist a auf das gleiche Objekt wie b?").

Wenn __eq__ und __ne__ definiert sind, finden Sie dieses Verhalten (das ist die eine, die wir suchen):

>>> a = Foo(1)
>>> b = Foo(1)
>>> a is b
False
>>> a == b
True

InformationsquelleAutor der Frage | 

Schreibe einen Kommentar