我在Python中编写了一个容器类型,并尝试编写一个健壮的
__repr__
方法,以正确处理包含自身的情况。例如,这是内置的list
如何处理的:>>> x = []
>>> x.append(x)
>>> repr(x)
'[[...]]'
在CPython中编写的容器类型可以使用Py_ReprEnter
和Py_ReprLeave
实现此功能。纯Python中是否有等效的功能,还是我需要创建自己的功能呢?
self.something
是一个占位符,用于涉及递归的一些更复杂的工作。在糟糕的情况下,里面的某些东西可能会导致异常发生。如果出现这种情况,我们希望确保在返回时清除reprs
列表,否则它将累积实例,随着错误增加而导致越来越多的MyThing
呈现为MyThing(...)
,即使没有递归。 - bobinceself._list
实际上是一个元组,如果它只有一个元素,就会添加一个不必要的逗号... 还要注意[1:-1]
只是切掉了'('
和')'
,然后你立即又添加了回去 - 因此等同于return 'mything%r' % self._list
。 - o11c