'list'对象没有属性。不能设置新属性?

时间:2014-05-26 21:12:55

标签: python

在构建标题问题时,我看到了https://stackoverflow.com/questions/23642105/attributeerror-list-object-has-no-attribute-trackprogressAttributeError: '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()函数,完全没有问题。

2 个答案:

答案 0 :(得分:2)

显然binaryTree会返回一个列表,而不是BinaryTree。因此,在self = binaryTree(self.root)行之后,self现在是一个列表,因此self.leftChild = ...会产生错误,因为您无法对列表执行此操作。

  

binaryTree根本没有关注

我很确定你错了。

答案 1 :(得分:1)

class BinaryTree(list):更改为class BinaryTree(object):。没有必要将您的树对象从列表类中删除。

(另外,覆盖self可能不是你想要做的。你可能想要分配给self的子属性。)