У меня есть класс, который выглядит примерно так:Сравнение двух объектов с вложенными списками как свойства
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
Однако, в данном случае «с» может быть списком Фооса с «с» с, которая содержит список Фооса, бывшее что-то вроде:
[Foo(1,2), Foo(3,4,[Foo(5,6)])]
Что такое хороший подход в работе с этим типом сравнения объектов, учитывая список структуру структуру/объект? Я предполагаю, что просто делать self.c == other.c
недостаточно для этого.
Почему вы думаете, что это проблема? Если вы сравниваете списки, Python будет сравнивать элементы в них, чтобы определить, являются ли они равными (при условии, что они имеют одинаковую длину, которая сначала проверяется). См. http://stackoverflow.com/q/29215418/3001761 – jonrsharpe
Исправить ваш '__eq__', чтобы использовать' == 'вместо' = 'и включать сравнение' c'. –
'return all (getattr (self, n) == getattr (other, n) для n in ('a', 'b', 'c'))' – Kupiakos