Maison > Article > développement back-end > Comment définir l'égalité des objets personnalisés en Python : devriez-vous implémenter `__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!