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