У меня есть класс, который работает аналогично списку. Это может содержать себя, и это приводит к проблемам печати. Python обрабатывает это с заменой рекурсивной части на многоточие. Я могу сделать это, когда вложение просто, где a = []; a.append(a)
, сравнивая отдельные элементы с самим собой, но когда есть более сложные отношения, это не работает. Какой хороший способ заменить рекурсивные детали с помощью механизма печати Ellipsis или Hijack Pythons? Я попытался создать список из значений из себя и вернуть str(mylist)
, но я тоже получил ошибку рекурсии.
class foo:
def __init__(self):
#stuff happens
def __repr__(self):
s = []
for i in range(self.length):
if self[i] is self:
s.append("[...]")
else:
s.append(repr(self[i]))
return f"[{','.join(s)}]"
class bar:
def __init__(self):
# stuff happens
def __repr__(self):
return str(list(self))
a = foo()
b = foo()
a.append(b)
b.append(a)
print(a)
RecursionError: maximum recursion depth exceeded
a = bar()
b = bar()
a.append(b)
b.append(a)
print(a)
RecursionError: maximum recursion depth exceeded