我无法理解为什么默认__repr__
的实现不会提供更多信息。
https://stackoverflow.com/a/2626364/3646408的答案 州
默认为 repr ,其行为如下:
return "%s(%r)" % (self.__class__, self.__dict__)
本来就太危险了(对于 例如,如果对象引用,太容易进入无限递归 彼此)。
这种情况将是
instance = Class(); instance.attr = instance
这对我来说似乎更像是一个错误。可能发生这种情况的有效用例是什么?
答案 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。