Je viens d'écrire un script de test pour un projet que j'ai en python, et j'ai appris que vérifier si les valeurs de deux objets sont équivalents n'est pas aussi simple que foo == bar
. Par exemple, j'ai un objet dashboard
qui a une trame de données de pandas géants comme un attribut, donc je défini sa méthode __eq__
comme:Existe-t-il une méthode générale pour tester si les attributs de deux objets sont équivalents en Python?
def __eq__(self, other):
vals = [self.__dict__[k] == other.__dict__[k] for k in self.__dict__.keys()]
vals = [v if isinstance(v, bool) else all(v) for v in vals]
return all(vals)
Il compare les dictionnaires de chaque objet, et si l'une de ces comparaisons cède autre chose que un booléen (par exemple, une image) il applique all()
pour le réduire à un seul booléen. J'applique ensuite all()
à cette liste complète de comparaisons d'attributs pour vérifier si tous les attributs self
et other
sont équivalents.
J'utilisé cette définition __eq__
dans plusieurs classes, et aussi utilisé quelque chose de similaire pour une méthode de comparaison dans ma classe de test parent. J'ai réussi mon test, mais je suis curieux de savoir s'il existe une façon plus élégante/efficace de gérer cela. (Avertissement: Test est nouveau pour moi, ainsi que la POO en général.)
vous parlez des tests: vous devez utiliser un framework de test comme UnitTest ou Pytest; ceux-ci ont beaucoup de fonctions intégrées pour faire ce genre de choses. – MrE