Maison  >  Article  >  développement back-end  >  Comment définir l'égalité des objets personnalisés en Python : devriez-vous implémenter `__eq__` ?

Comment définir l'égalité des objets personnalisés en Python : devriez-vous implémenter `__eq__` ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-11-03 09:39:02835parcourir

How to Define Custom Object Equality in Python: Should You Implement `__eq__`?

Amélioration de l'égalité des objets par comparaison d'attributs

En Python, la comparaison de deux objets pour l'égalité (à l'aide de l'opérateur ==) est généralement effectuée par défaut sur une comparaison de leurs références d’objet. Cependant, cela peut ne pas être souhaitable lorsque des objets de la même classe ont des attributs identiques mais des références d'objet distinctes.

Personnalisation de l'égalité des objets

Pour modifier le comportement de l'égalité des objets, nous pouvons implémenter la méthode eq dans la définition de classe. En définissant une méthode eq personnalisée, nous spécifions les critères exacts pour déterminer l'égalité entre les instances de cette classe.

Implémentation pour MyClass

Dans le Dans l'exemple fourni, nous avons la classe MyClass avec les variables membres foo et bar. Nous pouvons implémenter la méthode eq comme suit :

class MyClass:
    def __init__(self, foo, bar):
        self.foo = foo
        self.bar = bar

    def __eq__(self, other):
        if not isinstance(other, MyClass):
            return NotImplemented
        
        return self.foo == other.foo and self.bar == other.bar

Avec cette implémentation, nous vérifions que les deux objets sont des instances de MyClass, puis comparons leurs valeurs foo et bar. Si ces attributs correspondent, les objets sont considérés comme égaux et la méthode eq renvoie True.

Implications et considérations

Mise en œuvre de eq rend les instances de votre classe impossibles à hacher, ce qui signifie qu'elles ne peuvent pas être stockées dans des ensembles ou des dictionnaires. Si votre classe représente un type mutable, vous pouvez envisager de laisser vos instances non hachables.

Pour les modèles de données immuables, il est recommandé d'implémenter également la méthode hash pour permettre aux instances de se comporter correctement. dans les dictionnaires et les ensembles.

Conclusion

En personnalisant la méthode eq, nous prenons le contrôle de la façon dont les objets d'une classe spécifique sont comparés pour l'égalité . Cela nous permet de définir l'égalité en fonction des attributs pertinents de nos objets, garantissant qu'ils sont considérés comme égaux lorsque leurs attributs correspondent, quelles que soient leurs références d'objet.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn