Maison >développement back-end >Tutoriel Python >Comment réaliser des comparaisons d'égalité élégantes dans les classes Python ?
Dans la programmation orientée objet, il est souvent crucial de définir des contrôles d'égalité entre les objets des classes personnalisées. Python permet cela grâce à la mise en œuvre de méthodes spéciales, eq et __ne__, pour les comparaisons d'équivalence et d'inégalité, respectivement.
Une approche établie consiste à comparer les attributs dict de deux objets :
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
Cependant, considérons la méthode plus simple suivante :
class Number: def __init__(self, number): self.number = number def __eq__(self, other): return isinstance(other, Number) and self.number == other.number
Cette méthode concise élimine le besoin de comparaisons complexes dict, ce qui en fait une méthode élégante alternative.
De plus, il gère les sous-classements de manière transparente, garantissant des contrôles d'égalité commutatifs et cohérents :
class SubNumber(Number): pass n1 = Number(1) n2 = Number(1) n3 = SubNumber(1) n4 = SubNumber(4) print(n1 == n2) # True print(n2 == n1) # True print(n1 == n3) # True print(n1 != n4) # True print(len(set([n1, n2, n3]))) # 1
Pour compléter la solution, il est essentiel de remplacer la méthode hash pour hachage cohérent et identification unique :
class Number: def __init__(self, number): self.number = number def __eq__(self, other): return isinstance(other, Number) and self.number == other.number def __hash__(self): return hash(self.number)
Cela résout les problèmes de hachage rencontrés lors de l'utilisation de dict pour les comparaisons d'égalité, garantissant un comportement d'ensemble fiable et une identification unique d'objets distincts.
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!