J'ai une classe qui ressemble à ceci:Comparaison de deux objets avec des listes imbriquées en tant que propriétés
class Foo(object):
def __init__(self, a, b, c=None):
self.a = a
self.b = b
self.c = c # c is presumed to be a list
def __eq__(self, other):
return self.a == other.a and self.b == other.b
Cependant, dans ce cas, « c » pourrait être une liste de Foos, avec s « c » qui contient liste des Foos, ex quelque chose comme:
[Foo(1,2), Foo(3,4,[Foo(5,6)])]
Quelle est une bonne approche pour faire face à ce type de comparaison d'objets, étant donné la structure de la liste/structure de l'objet? Je suppose que simplement faire un self.c == other.c
est insuffisant pour cela.
Pourquoi pensez-vous que c'est un problème? Si vous comparez des listes, Python va comparer les éléments pour déterminer s'ils sont égaux (en supposant qu'ils ont la même longueur, qui est vérifiée en premier). Voir par exemple http://stackoverflow.com/q/29215418/3001761 – jonrsharpe
Fixez votre '__eq__' pour utiliser' == 'au lieu de' = 'et incluez la comparaison de' c'. –
'retourner tout (getattr (self, n) == getattr (autre, n) pour n dans ('a', 'b', 'c'))' – Kupiakos