Implementieren Sie __eq__ usw. generisch in der Python-Klasse

Wenn Sie den Vergleichsoperator auf die definierte Klasse anwenden möchten, implementieren Sie die Rich-Vergleichsmethode. Wenn man eine Klasse betrachtet, die eine Person als Beispiel darstellt, sieht sie folgendermaßen aus:

class Person(object):
    def __init__(self, firstname, lastname, email):
        self.firstname = firstname
        self.lastname = lastname
        self.email= email
    def __eq__(self, other):
        if other is None or not isinstance(other, Person): return False
        #Das Folgende ist problematisch
        return self.firstname == other.firstname and
            self.lastname == other.lastname and
            self.email == other.email
    def __ne__(self, other):
        return not self.__eq__(other)

Um ehrlich zu sein, ist es ärgerlich, jedes Mal, wenn ich eine Klasse definiere, self.xxx == other.xxx und ... zu schreiben. Also werde ich die dict -Methode verwenden, die von der Basisklasse geerbt wurde.

class Person(object):
    def __init__(self, firstname, lastname, email):
        self.firstname = firstname
        self.lastname = lastname
        self.email= email
    def __eq__(self, other):
        # isinstance(other, Person)Entfernen
        if other is None or type(self) != type(other): return False
        # __dict__Vergleichen Sie Attribute mithilfe von Methoden
        return self.__dict__ == other.__dict__
    def __ne__(self, other):
        return not self.__eq__(other)

Jetzt können Sie die beiden Objekte generisch vergleichen, ohne den Attributnamen zu schreiben. assertEquals wird ebenfalls mit einem Rand bestanden. Es wird angenommen, dass das Attribut eine eq -Methode hat.

Recommended Posts

Implementieren Sie __eq__ usw. generisch in der Python-Klasse
Fallklasse in Python
Implementieren Sie XENO mit Python
Implementieren Sie sum in Python
Implementieren Sie Traceroute in Python 3
Klassennotation in Python
Implementieren Sie Naive Bayes in Python 3.3
Implementieren Sie alte Chiffren in Python
Implementieren Sie Redis Mutex in Python
Implementieren Sie die Erweiterung in Python
Implementieren Sie schnelles RPC in Python
Implementieren Sie den Dijkstra-Algorithmus in Python
Implementieren Sie den Slack Chat Bot in Python
Implementieren Sie das Stacking-Lernen in Python [Kaggle]
Implementieren Sie die Funktion power.prop.test von R in Python
In Python-Klassenvariablen versteckte Landminen
Lesen Sie PNG-Chunks in Python (Klassenausgabe)
Implementieren Sie das Singleton-Muster in Python
Untersuchen Sie die Klasse eines Objekts mit Python
Implementieren Sie die REST-API schnell in Python
Ich habe versucht, PLSA in Python zu implementieren
[Einführung in Python] Wie verwende ich eine Klasse in Python?
Ich habe versucht, Permutation in Python zu implementieren
Implementieren Sie den FIR-Filter in Python und C.
Implementieren Sie gemeinsam statistische Hypothesentests in Python
Ich habe versucht, PLSA in Python 2 zu implementieren
Trump-Klasse in Python (mit Vergleich)
Ich habe versucht, ADALINE in Python zu implementieren
Ich habe versucht, PPO in Python zu implementieren
Verwendung von __slots__ in der Python-Klasse
Generieren Sie eine Klasse aus einer Zeichenfolge in Python
Python in der Optimierung
CURL in Python
Metaprogrammierung mit Python
Python 3.3 mit Anaconda
[Python] -Klasse, Instanz
Versuchen Sie, Oni Mai Tsuji Miserable mit Python zu implementieren
Geokodierung in Python
"Kanrika" die Python-Klasse
Metaanalyse in Python
Unittest in Python
Unbeaufsichtigter Betrieb von Google Spreadsheets (usw.) in Python
Über Python, Klasse
So implementieren Sie Shared Memory in Python (mmap.mmap)
Unterschied zwischen Variablen und Selbst. Variablen in der [Python] -Klasse
Ich habe eine Klasse in Python3 und Java geschrieben
Epoche in Python
Zwietracht in Python
Deutsch in Python
DCI in Python
Quicksort in Python
nCr in Python
N-Gramm in Python
Programmieren mit Python
Lassen Sie uns den englischen Sprachdialog in Python implementieren [offline]
Plink in Python
Ich habe versucht, TOPIC MODEL in Python zu implementieren