创建一个PrefixTree,直到我尝试递归执行的insert函数之前都没问题。
class SimplePrefixTree:
def __init__(self, weight_type: str) -> None:
self.value = []
self.weight = 0
self.subtrees = []
self.weight_type = weight_type
def insert(self, value: Any, weight: float, prefix: List) -> None:
new_tree = SimplePrefixTree(self.weight_type)
if prefix == []: # if prefix list is empty
self.value = value
self.weight = weight
elif len(prefix) == 1: # if prefix list has 1 item
new_tree.value = prefix
new_tree.weight = weight
new_tree.subtrees.append(SimplePrefixTree(self.weight_type).insert(value, weight, []))
self.subtrees.append(new_tree)
现在,当我尝试运行此命令时:
>>> a = SimplePrefixTree('sum')
>>> a.insert('a', 20, ['a'])
>>> a.subtrees
[<SimplePrefixTree object at 0x1171e9da0>]
>>> a.subtrees[0].subtrees
[None]
这毫无意义,因为我创建了一个类对象,然后调用了该方法,并且第一次运行成功,但是 elif 类对象实例返回None。我还测试了 if 函数是否起作用,并且属性确实发生了突变。
答案 0 :(得分:2)
这是正确的,因为存储在subtrees变量中的值是SimplePrefixTree,所以发生了
>>> a.subtrees
[<SimplePrefixTree object at 0x1171e9da0>]
因此,它将在数组中存储第二个SimplePrefixTree的位置,如果您想使其更具吸引力或显示值,则应在SimplePrefixTree类中添加 repr ()方法。 / p>
关于这一部分:
>>> a.subtrees[0].subtrees
[None]
这是因为第二个SimplePrefixTree的subtrees变量中没有存储任何值。
无论如何,我的意思是,您的代码完全按照应有的方式工作,也许您只是对指针值感到困惑。
很抱歉造成混乱的解释,希望它能帮助您了解正在发生的事情。