Python Разработка | Web Backend, Парсинг & Telegram Bots. Пайтон программирование с нуля. Django, FastAPI и SQL. Уроки для начинающих и IT карьера. Coding.
Образование · 31 июля 2026 г.
Когда вы создаете кастомный метод __repr__ для объекта, обычно нужно включить представл... — 31 июля 2026 г. в 05:00:11.665
Когда вы создаете кастомный метод __repr__ для объекта, обычно нужно включить представление его атрибутов. Однако важно помнить, что нужно явно вызывать repr(), так как форматирование вызывает str() вместо repr(). Пример простого кода: class Pair: def __init__(self, left, right): self.left = left self.right = right def __repr__(self): class_name = type(self).__name__ repr_left = repr(self.left) repr_right = repr(self.right) return f'{class_name}({repr_left}, {repr_right})' Проблема возникает, если вы вызываете repr для объекта, который содержит ссылку на самого себя. Это может привести к рекурсии: In : p = Pair(1, 2) In : p Out: Pair(1, 2) In : p.right = p In : p Out: [...] RecursionError: maximum recursion depth exceeded while calling a Python object Для решения этой проблемы можно использовать декоратор reprlib.recursive_repr, который обрабатывает рекурсивные вызовы: @reprlib.recursive_repr() def __repr__(self): class_name = type(self).__name__ repr_left = repr(self.left) repr_right = repr(self.right) return f'{class_name}({repr_left}, {repr_right})' Теперь код работает корректно: In : p = Pair(1, 2) In : p.right = p In : p Out: Pair(1, ...) 👉 @BookPython

