Lors de l'écriture de classes personnalisées, il est souvent important de permettre à l'équivalence par le biais de l' ==
et !=
opérateurs. En Python, cela est rendu possible par la mise en œuvre de l' __eq__
et __ne__
méthodes spéciales, respectivement. La façon la plus simple que j'ai trouvé à faire c'est la méthode suivante:
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)
Savez-vous de plus élégant moyen de le faire? Connaissez-vous des inconvénients à l'aide de la méthode de comparaison des __dict__
s?
Remarque: Un peu de précisions--lorsqu' __eq__
et __ne__
ne sont pas définis, vous trouverez ce comportement:
>>> a = Foo(1)
>>> b = Foo(1)
>>> a is b
False
>>> a == b
False
C'est, a == b
évalue False
car il fonctionne vraiment a is b
, un test d'identité (par exemple, "Est - a
le même objet que l' b
?").
Lors de l' __eq__
et __ne__
sont définis, vous trouverez ce comportement (qui est celui que nous sommes après):
>>> a = Foo(1)
>>> b = Foo(1)
>>> a is b
False
>>> a == b
True