信息__repr__什么时候会有危险?

时间:2016-06-05 20:58:56

标签: python repr

我无法理解为什么默认__repr__的实现不会提供更多信息。

https://stackoverflow.com/a/2626364/3646408的答案 州

  

默认为 repr ,其行为如下:return "%s(%r)" % (self.__class__, self.__dict__)本来就太危险了(对于   例如,如果对象引用,太容易进入无限递归   彼此)。

这种情况将是

instance = Class(); instance.attr = instance

这对我来说似乎更像是一个错误。可能发生这种情况的有效用例是什么?

3 个答案:

答案 0 :(得分:2)

这是某种层次结构的有效用例,当节点可以有子节点引用其父节点

举个例子,

root = Node()
child = Node()
child.parent=root
root.children = [child]

答案 1 :(得分:2)

考虑一个DOM树,其中一个节点包含对其子节点的引用,并且每个子节点都包含对其父节点的引用。

(也可以通过nextSibling / previousSibling在兄弟姐妹之间进行。)

答案 2 :(得分:2)

任何具有双向引用的对象都可能发生这种情况。例如,一个代表家庭关系的班级,每个人都提到他们的配偶,或者父母提到他们的孩子和孩子的地方都提到了他们的父母。

PHP的print_r()符合您的建议;有关某人试图打印代表HTML DOM元素的对象的问题,请参阅Recursion using PHP Simple DOM Parser