Maison > développement back-end > Tutoriel Python > Comment puis-je m'assurer que mes classes Python sont vraiment égales : un guide des méthodes d'équivalence

Comment puis-je m'assurer que mes classes Python sont vraiment égales : un guide des méthodes d'équivalence

DDD
Libérer: 2024-11-08 10:51:01
original
986 Les gens l'ont consulté

How Can I Ensure My Python Classes Are Truly Equal: A Guide to Equivalence Methods

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
Copier après la connexion

Cette version comprend :

  • Gestion des sous-classes : Elle garantit que l'équivalence est correctement vérifiée entre la classe Number et ses sous-classes.
  • Correction non commutative : Elle garantit que les comparaisons d'égalité sont commutatives, quel que soit l'ordre des opérandes.
  • Hash Overriding : En définissant une méthode hash personnalisée, elle garantit que les objets ayant la même valeur ont la même valeur de hachage, ce qui est crucial pour les opérations d'ensemble et de dictionnaire.

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
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal