Python Glossary English

Python 3.2+reprlibфункция

reprlib.recursive_repr()

рекурсивные структуры

Декоратор для __repr__, защищающий от бесконечной рекурсии: при повторном входе в тот же объект возвращает '...'.

Синтаксис

@reprlib.recursive_repr(fillvalue='...')

Встроенные list и dict сами печатают [...] для ссылки на себя, но собственный __repr__, который обращается к атрибутам, при цикле a.other = b, b.other = a уходит в RecursionError. Декоратор отслеживает пары (объект, поток), так что работает и при многопоточности. Обратите внимание на скобки: @recursive_repr(), а @recursive_repr без вызова сломает класс.

Примеры

import reprlib
class Node:
    @reprlib.recursive_repr()
    def __repr__(self):
        return f'Node({self.other!r})'
a, b = Node(), Node()
a.other, b.other = b, a
print(repr(a))  # → Node(Node(...))
class Node:
    def __repr__(self):
        return f'Node({self.other!r})'
a, b = Node(), Node()
a.other, b.other = b, a
repr(a)  # → RecursionError: maximum recursion depth exceeded

См. также

Частые ошибки

Открыть в полном глоссарииdocs.python.orgСообщить о неточности