在构建标题问题时,我看到了https://stackoverflow.com/questions/23642105/attributeerror-list-object-has-no-attribute-trackprogress和AttributeError: 'list' object has no attribute 'display' in python
但与那些问题不同,这与Can't set attributes of object class类似,当且仅当列表不像Object(保留,只读attr)时才重复
我可以设置self.root并且为了检查self.rightChild& self.leftChild 那为什么会抛出这个错误?
class BinaryTree(list):
...: def __init__(self,root_val,**kwarg):
...: super(type(self),self).__init__()
...: self.root = root_val
...: self.rightChild = self.leftChild = None
...: self = binaryTree(self.root)
...: if 'left_child' in kwarg:
...: self.leftChild = kwarg['left_child']
...: if 'right_child' in kwarg:
...: self.rightChild = kwarg['right_child']
...:
b = BinaryTree(4,left_child = 5,right_child = 6)
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
<ipython-input-67-3ea564fafb06> in <module>()
----> 1 b = BinaryTree(4,left_child = 5,right_child = 6)
<ipython-input-66-208c402b07ce> in __init__(self, root_val, **kwarg)
6 self = binaryTree(self.root)
7 if 'left_child' in kwarg:
----> 8 self.leftChild = kwarg['left_child']
9 if 'right_child' in kwarg:
10 self.rightChild = kwarg['right_child']
AttributeError: 'list' object has no attribute 'leftChild'
binaryTree是一些运行良好的foo()函数,完全没有问题。
答案 0 :(得分:2)
显然binaryTree
会返回一个列表,而不是BinaryTree
。因此,在self = binaryTree(self.root)
行之后,self
现在是一个列表,因此self.leftChild = ...
会产生错误,因为您无法对列表执行此操作。
binaryTree根本没有关注
我很确定你错了。
答案 1 :(得分:1)
将class BinaryTree(list):
更改为class BinaryTree(object):
。没有必要将您的树对象从列表类中删除。
(另外,覆盖self
可能不是你想要做的。你可能想要分配给self
的子属性。)