Implémenter __eq__ etc. de manière générique dans la classe Python

Si vous souhaitez appliquer l'opérateur de comparaison à la classe définie, implémentez la méthode de comparaison enrichie. Considérant une classe qui représente une personne comme exemple, cela ressemble à ceci:

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
        #Ce qui suit est gênant
        return self.firstname == other.firstname and
            self.lastname == other.lastname and
            self.email == other.email
    def __ne__(self, other):
        return not self.__eq__(other)

Pour être honnête, c'est ennuyeux d'écrire self.xxx == other.xxx et ... à chaque fois que je définis une classe. J'utiliserai donc la méthode dict héritée de la classe de base.

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)Retirer
        if other is None or type(self) != type(other): return False
        # __dict__Comparer les attributs à l'aide de méthodes
        return self.__dict__ == other.__dict__
    def __ne__(self, other):
        return not self.__eq__(other)

Vous pouvez maintenant comparer les deux objets de manière générique sans avoir à écrire le nom de l'attribut. assertEquals passe également avec une marge. On suppose que l'attribut a une méthode eq.

Recommended Posts

Implémenter __eq__ etc. de manière générique dans la classe Python
classe de cas en python
Mettre en œuvre des recommandations en Python
Implémenter XENO avec python
Implémenter sum en Python
Implémenter Traceroute dans Python 3
Notation de classe en Python
Implémenter Naive Bayes dans Python 3.3
Implémenter d'anciens chiffrements en python
Implémenter Redis Mutex en Python
Implémenter l'extension en Python
Mettre en œuvre un RPC rapide en Python
Implémenter l'algorithme de Dijkstra en python
Implémenter le bot de discussion Slack en Python
Mettre en œuvre l'apprentissage de l'empilement en Python [Kaggle]
Implémenter la fonction power.prop.test de R en python
Les mines terrestres cachées dans les variables de classe Python
Lire des morceaux PNG en Python (édition de classe)
Implémenter le modèle Singleton en Python
Examiner la classe d'un objet avec python
Implémentez rapidement l'API REST en Python
J'ai essayé d'implémenter PLSA en Python
[Introduction à Python] Comment utiliser la classe en Python?
J'ai essayé d'implémenter la permutation en Python
Implémenter le filtre FIR en langage Python et C
Mettre en œuvre collectivement des tests d'hypothèses statistiques en Python
J'ai essayé d'implémenter PLSA dans Python 2
Classe Trump en Python (avec comparaison)
J'ai essayé d'implémenter ADALINE en Python
J'ai essayé d'implémenter PPO en Python
Comment utiliser __slots__ dans la classe Python
Générer une classe à partir d'une chaîne en Python
Python en optimisation
CURL en Python
Métaprogrammation avec Python
Python 3.3 avec Anaconda
[Python] classe, instance
Essayez d'implémenter Oni Mai Tsuji Miserable avec python
Géocodage en python
"Kanrika" la classe python
Méta-analyse en Python
Unittest en Python
Fonctionnement sans assistance des feuilles de calcul Google (etc.) en Python
À propos de python, classe
Comment implémenter la mémoire partagée en Python (mmap.mmap)
[python] Différence entre variable et self. Variable dans la classe
J'ai écrit une classe en Python3 et Java
Époque en Python
Discord en Python
Allemand en Python
DCI en Python
tri rapide en python
nCr en python
N-Gram en Python
Programmation avec Python
Implémentons le dialogue vocal anglais en Python [hors ligne]
Plink en Python
J'ai essayé d'implémenter TOPIC MODEL en Python