2012-12-02 24 views
2

我想实现一个方法,这是必要的使用递归,但每一次,我得到的global name not defined错误 我的班级是这样的:与方法递归自定义类,全局名称没有定义

class MyClass(object): 
    def _init_(self, name=None, content=None): 
     self.name = name 
     self.content = content 

这是一个节点类,名称,它只是一个文本字符串,内容是一个列表的孩子(他们的节点也是如此),被初始化为None但构建树的结构功能给他们一个空白列表,如果他们没有孩子。该级工作正常,所以做的功能,但如果我尝试recurtion添加方法,他们只是不工作,即使他们的工作只是罚款作为一个独立的功能,即:

def get_nodes(self): 
    c = [] 
    c.append(self.name) 
    if self.content != []: 
     for a in self.content: 
      c.extend(get_nodes(a)) 
    return c 

我知道这是可能的, 我究竟做错了什么?

回答

4

你需要做a.get_nodes()

此外,初始化方法被称为__init__,而不是_init_(两端都有两个下划线)。

编辑:如果您不会显示你的代码,我们不能告诉你什么是你的代码错误。此代码适用于我:

class MyClass(object): 
    def __init__(self, name=None, content=None): 
     self.name = name 
     self.content = content 
    def get_nodes(self): 
     c = [] 
     c.append(self.name) 
     if self.content != []: 
      for a in self.content: 
       c.extend(a.get_nodes()) 
     return c 

>>> n = MyClass('me', []) 
>>> m = MyClass('other', [n]) 
>>> m.get_nodes() 
['other', 'me'] 

如果您的代码不起作用,那么您必须说明您的代码与此不同。

+0

非常感谢你,这两种方法中的一种工作做这之后就好了(写它作为一个实例方法,我相信被称为),另一种,并且是本例中的funtion,并没有奏效。我一直得到同样的错误,初始化只是一个错字,我在课堂上已经明白了。 – Janbure

+0

@Janbure:我不太明白你的意思。你是说'get_nodes'是一种方法(即在类定义中)还是不是?你打电话过得怎么样?你可以发布一个完整的可运行示例来演示问题吗? – BrenBarn

+0

是的,它是在一个类里面,就像我在操作系统中发布的那个类一样,我不能发布完整的代码,因为它是一个任务,我害怕被复制,我也不想让你人们做我的功课,但看起来就像我发布的那样。我最关心的是为什么它不能像这样调用node.get_nodes()方法,但它确实可以用作纯函数? – Janbure

相关问题