在python中如何在类中而不是在类外声明函数

2024-10-03 13:29:56 发布

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

我对python和算法非常陌生,我想在类内部而不是外部声明函数。以下是我现在拥有的:

通用树类NAryTree实现:

class NAryTree:
    def __init__(self, key):
        self.key = key
        self.children = []
    def __str__(self):
        return str(self.key)
    def addChild(self, tree):
        self.children.append(tree)
    def getChild(self, k):
        return self.children[k]
    def getNChildren(self):
        return len(self.children)
    def __iter__(self):
        return self.children.__iter__()
    def __next__(self):
        return self.children.__next__()

计算子树最小和的函数:

def minSubtree(tree):
    value = tree.key
    for child in tree:
        value += min(minSubtree(child), 0)
    return value

和构建树函数buildMyNAryTree()

def buildMyNAryTree():
    root = NAryTree(1)

    root.addChild(NAryTree(-2))
    root.addChild(NAryTree(3))
    root.addChild(NAryTree(4))

    root.getChild(0).addChild(NAryTree(-5))
    root.getChild(1).addChild(NAryTree(6))
    root.getChild(1).addChild(NAryTree(7))
    root.getChild(2).addChild(NAryTree(-8))

    root.getChild(0).getChild(0).addChild(NAryTree(-9))
    root.getChild(0).getChild(0).addChild(NAryTree(-10))
    root.getChild(0).getChild(0).addChild(NAryTree(11))
    root.getChild(1).getChild(0).addChild(NAryTree(-4))
    root.getChild(1).getChild(1).addChild(NAryTree(12))
    root.getChild(1).getChild(1).addChild(NAryTree(-13))
    root.getChild(2).getChild(0).addChild(NAryTree(14))
    return root

我想要的是在类中声明minSubtree(tree),但是我不知道如何更改参数。换句话说,我想用buildMyNAyTree().minSubtree()而不是minSubtree(buildMyNAryTree())返回子树的最小和。你知道吗


Tags: key函数selftree声明returnvaluedef
2条回答

我想这应该是你想要的:

它遍历树的子级并调用子级的minSubTree命令。你知道吗

class NAryTree:
    def __init__(self, key):
        self.key = key
        self.children = []
    def __str__(self):
        return str(self.key)
    def addChild(self, tree):
        self.children.append(tree)
    def getChild(self, k):
        return self.children[k]
    def getNChildren(self):
        return len(self.children)
    def __iter__(self):
        return self.children.__iter__()
    def __next__(self):
        return self.children.__next__()

    def minSubtree(self):
        value = self.key
        for child in self.children:
            value += min(child.minSubtree(), 0)
        return value

将函数缩进到类主体中,按照约定,将tree重命名为self。访问child.minSubtree()而不是minSubtree(child)。你知道吗

class NAryTree:
    # your other methods
    def minSubtree(self):
        value = self.key
        for child in self:
            value += min(child.minSubtree(), 0)
        return value

print(buildMyNAryTree().minSubtree())产生-32。你知道吗

相关问题 更多 >