在python中的对象初始化中传递self来运行

时间:2014-02-21 07:18:11

标签: python class tree initialization

我有一个类,它表示一个树状结构的节点,它存储它的父节点和任何子节点

class Node:
    def __init__(self,n, p):
        self.name = n
        self.parent = p
        self.children = []
        if p != None:       
            p.addChild(self)

    def setParent(np):
        if np != None:
            self.parent = np


    def addChild(nc):
        if nc != None:
            children.append(nc)

出于自动化目的,当创建节点时,我希望它调用父节点的addChild方法将其自身添加到子列表中,但是当以这种方式使用父节点初始化节点时,我收到错误: TypeError: addChild() takes exactly 1 argument (2 given)

如何从self获得2个参数?也许有更合理的方法来解决这个问题?

2 个答案:

答案 0 :(得分:0)

当你说

p.addChild(self)

Python会像这样调用addChild

addChild(p, self)

因为addChildsetParent是实例方法。因此,他们需要接受调用它们的当前对象作为第一个参数

def setParent(self, np):
    ...
def addChild(self, np):
    ...
    self.children.append(nc)    # You meant the children of the current instance

答案 1 :(得分:0)

你需要使self成为类方法的第一个参数。

def setParent(self, np)

def addChild(self, nc)

您也应该明白这一点:http://docs.python.org/2/tutorial/classes.html