为什么说我的班级没有属性?

时间:2014-03-09 02:28:39

标签: python class

这是我的代码:

class Regex:
    def __init__(self: 'Regex',
                    value: object =None, child: list =None, child2: list = None):  
        """node with value and any nummber of children"""
        list_of_regex = [0,1,2,'e','|','.','*']
        self.value = value
        if self.value not in list_of_regex:
                raise Exception
        if not child:
            self.child = []
        if not child2:
            self.child2 = []
        else:
            self.child = child[:]
            self.child = child2[:]

    def __repr__(self: 'Regex') -> str:
        return ('Regex(' + repr(self.value) + ', ' +
                        repr(self.child) + ', ' + repr(self.child2) + ')') 

当我在我的python shell中输入以下内容时:

>>>Regex(1,[1])

输出是:

    Traceback (most recent call last):
  File "C:\Program Files (x86)\Wing IDE 101 5.0\src\debug\tserver\_sandbox.py", line 1,     in <module>
    # Used internally for debug sandbox under external interpreter
  File "C:\Program Files (x86)\Wing IDE 101 5.0\src\debug\tserver\_sandbox.py", line 19,      in __repr__
builtins.AttributeError: 'Regex' object has no attribute 'child'

我不确定为什么它告诉我我的班级没有属性'child'。看看当我尝试这两个不同的电话时会发生什么。

>>>c = Regex(1)
>>>c.child
[]

>>>c = Regex(1,[1])
>>>c.child
Traceback (most recent call last):
File "<string>", line 1, in <fragment>
builtins.AttributeError: 'Regex' object has no attribute 'child'

代码出了什么问题?

1 个答案:

答案 0 :(得分:3)

    if not child:
        self.child = []
    if not child2:
        self.child2 = []
    else:
        self.child = child[:]
        self.child = child2[:]

此处的else块与第二个if相关联。它与第一个if没有关联。这意味着如果指定了childchild2未被指定,则第二个if块是唯一触发的块,并且child未设置。

此外,

        self.child = child2[:]

你可能想在这里设置child2属性。