Comparaison d'égalité personnalisée dans les objets Python
Le comportement par défaut de Python traite les instances d'objet comme des entités distinctes, même lorsqu'elles partagent des attributs identiques. Ce comportement peut poser problème lorsque vous souhaitez comparer des objets en fonction de leurs propriétés internes plutôt que de leur identité d'objet. Voici comment personnaliser la comparaison d'égalité pour les instances d'objet :
Définition de la méthode eq
Pour contrôler la façon dont les objets de votre classe personnalisée sont comparés pour l'égalité , définissez la méthode eq dans la définition de la classe. Cette méthode prend deux arguments : self et other. Le paramètre self fait référence à l'objet actuel, tandis que other représente l'objet auquel il est comparé.
<code class="python">class MyClass: def __init__(self, foo, bar): self.foo = foo self.bar = bar def __eq__(self, other): if not isinstance(other, MyClass): # Don't compare to unrelated types return NotImplemented return self.foo == other.foo and self.bar == other.bar</code>
En implémentant __eq__, vous définissez essentiellement une vérification d'égalité personnalisée pour les instances de votre classe. Dans cet exemple, la méthode compare les attributs foo et bar de self et other, et renvoie True s'ils sont tous deux égaux.
Conséquences de l'implémentation de eq
L'implémentation de eq rend les instances de votre classe impossibles à hacher. Cela signifie qu’ils ne peuvent pas être utilisés comme clés dans des dictionnaires ou comme éléments dans des ensembles. En effet, Python s'appuie sur la fonction hash() pour déterminer si les objets peuvent être hachés et la valeur de hachage d'un objet est dérivée de son contenu interne. Étant donné que le contenu de vos objets peut changer en raison de l'attribution d'attributs, ils ne peuvent pas être hachés de manière fiable.
Si vous modélisez un type immuable, vous devez également implémenter la méthode hash pour garantir la cohérence. et un comportement prévisible lorsqu'il est utilisé dans des collections.
Éviter les solutions générales
Tenter de définir une méthode générale de comparaison d'égalité en parcourant dict et en comparant les valeurs n’est pas recommandé. Cette approche peut ne pas permettre de comparer correctement les objets s'ils contiennent des types incomparables ou impossibles à hacher dans leurs dictionnaires.
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!