Garder vos classes Python égales : un guide complet des méthodes d'équivalence
En Python, les eq et ne méthodes spéciales fournissent un moyen pratique de définir l’équivalence pour les classes personnalisées. Bien que l'approche de base consistant à comparer les __dict__s soit une option viable, elle peut être confrontée à des défis liés aux sous-classes et à l'interopérabilité avec d'autres types.
Une gestion plus robuste des équivalences
Pour résoudre ces problèmes limitations, envisagez une implémentation plus complète :
class Number: def __init__(self, number): self.number = number def __eq__(self, other): if isinstance(other, Number): return self.number == other.number return NotImplemented def __ne__(self, other): x = self.__eq__(other) if x is not NotImplemented: return not x return NotImplemented def __hash__(self): return hash(tuple(sorted(self.__dict__.items()))) class SubNumber(Number): pass
Cette version comprend :
Validation et Tests
Pour vérifier la robustesse de cette approche, voici un ensemble d'assertions :
n1 = Number(1) n2 = Number(1) n3 = SubNumber(1) n4 = SubNumber(4) assert n1 == n2 assert n2 == n1 assert not n1 != n2 assert not n2 != n1 assert n1 == n3 assert n3 == n1 assert not n1 != n3 assert not n3 != n1 assert not n1 == n4 assert not n4 == n1 assert n1 != n4 assert n4 != n1 assert len(set([n1, n2, n3])) == 1 assert len(set([n1, n2, n3, n4])) == 2
Ces assertions démontrent le comportement correct des méthodes d'équivalence et la cohérence des valeurs de hachage.
En adoptant cette approche plus complète, vous pouvez créer des classes Python avec une gestion robuste des équivalences, garantissant des comparaisons fiables et des opérations précises sur les ensembles et les 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!