在python中初始化对象时将self传递给函数

2024-05-20 14:17:51 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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个参数的?或许有更合乎逻辑的方法来处理这个问题?在


Tags: 方法selfnoneif节点defnp代表
2条回答

当你说

p.addChild(self)

Python将像这样调用addChild

^{pr2}$

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

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

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

def setParent(self, np)

def addChild(self, nc)

你也应该明确地阅读这个:http://docs.python.org/2/tutorial/classes.html

相关问题 更多 >