2 回答

TA贡献1841条经验 获得超3个赞
您的类结构已经成功地将节点的self值传递给其子节点。问题是你的list功能。while l.parent is not None:永远不会结束,因为循环中的任何内容都不会改变 的值l。调用list递归将创建一个新的上下文,其中一个名为另一个变量l具有与第一上下文的不同的值l,但是这对第一没有影响l或第一环。递归函数通常不需要实际循环来迭代数据结构的元素。尝试:
def list(l):
print(l.value)
if l.parent is not None:
list(l.parent)
或者:
def list(l):
while l is not None:
print(l.value)
l = l.parent
(我推荐后者,因为如果链超过 999 个元素,第一个会因“超过最大递归深度”而崩溃)
结果:
4
3
2
1
额外的风格提示:考虑将您的函数命名为list. 通常,您应该避免覆盖内置函数和类型的名称。

TA贡献1830条经验 获得超3个赞
由于缺乏明确的问题陈述,我应该投票结束你的问题,但无论如何......
在 Python 中的对象中,如何传递当前对象的引用
与处理任何对象的方式相同。
对同一类的对象 b
这实际上无关紧要,但无论如何......
这样当我打电话给 b.parent 时,我可以回到对象 a?
class Foo(object):
def __init__(self, parent=None):
self.parent = parent
a = Foo()
b = Foo(a)
print(b.parent is a)
现在,对于您没有问的问题的答案,请参阅(并接受)凯文的回答;-)
添加回答
举报