首页 > 解决方案 > 类型错误:__init__() 缺少 1 个必需的位置参数:“值”

问题描述

我知道我需要一个 TernaryTree() 的实例最初为空,直到它通过 generate_tree() 方法使用列表 L 中的值。尝试了各种方法,但不确定从这里去哪里。我需要添加什么才能获得通过的价值?

    class TernaryTree(object):
            def __init__(self, value):
                    self.value = value
                    self.left = None
                    self.right = None
                    self.mid = None

        def insert_node(self, new_value):
                if new_value <= self.value: #check if value is lower
                        if self.left == None: #if value is none
                                self.left = TernaryTree(new_value) #add in node value
                        else:
                                self.left.insert_node(new_value) #go left place node value
                elif new_value == self.value: #check if value is the same
                        if self.mid == None:
                                self.mid = TernaryTree(new_value)
                        else:
                                self.mid.insert_node(new_value)
                else: #case when new_value > self.value:
                        if self.right == None:
                                self.right = TernaryTree(new_value)
                        else:
                                self.right.insert_node(new_value)

        def traverse_LMRW(self):
                if self.left != None: #alternatively, if self.left: 
                         self.left.traverse_LMRW()  #go a level deeper
                if self.mid != None:
                        self.mid.traverse_LMRW()
                if self.right != None: #if node on right is not None!
                         self.right.traverse_LMRW() #go a level deeper
                print(self.value)

        def leaf_count(self):
                if self is None: 
                        return 0 
                if(self.left is None and self.right is None): 
                        return 1 
                else: 
                        return leaf_count(self.left) + leaf_count(self.right)


        def generate_tree(L):
                T = TernaryTree(L[0])  #first element in our list is the root by default
                for value in L[1:]:
                        T.insert_node(value)
                return T

def main():
    L = [4,1,2,2,3,1,0,4,6,5,6,4]
    T = TernaryTree()
    T.generate_tree(L)
    T.traverse_LMRW()
    T.leaf_count()
main()

标签: pythoninit

解决方案


根据您的代码generate_tree不是实例方法。所以从类缩进中缩进它。并从那里将其称为 python 函数,它将创建TernaryTree.

在 main 中,您创建的实例TernaryTree没有构造函数中所需的任何初始值__init__

更新代码将是:

class TernaryTree(object):
    def __init__(self, value):
        self.value = value
        self.left = None
        self.right = None
        self.mid = None

    def insert_node(self, new_value):
        if new_value <= self.value: #check if value is lower
            if self.left == None: #if value is none
                self.left = TernaryTree(new_value) #add in node value
            else:
                self.left.insert_node(new_value) #go left place node value
        elif new_value == self.value: #check if value is the same
            if self.mid == None:
                self.mid = TernaryTree(new_value)
            else:
                self.mid.insert_node(new_value)
        else: #case when new_value > self.value:
            if self.right == None:
                self.right = TernaryTree(new_value)
            else:
                self.right.insert_node(new_value)

    def traverse_LMRW(self):
        if self.left != None: #alternatively, if self.left: 
            self.left.traverse_LMRW()  #go a level deeper
        if self.mid != None:
            self.mid.traverse_LMRW()
        if self.right != None: #if node on right is not None!
            self.right.traverse_LMRW() #go a level deeper
        print(self.value)

    def leaf_count(self):
        if self is None: 
            return 0 
        if(self.left is None and self.right is None): 
            return 1 
        else: 
            return leaf_count(self.left) + leaf_count(self.right)


def generate_tree(L):
    T = TernaryTree(L[0])  #first element in our list is the root by default
    for value in L[1:]:
        T.insert_node(value)
    return T

def main():
    L = [4,1,2,2,3,1,0,4,6,5,6,4]
    T = generate_tree(L)
    T.traverse_LMRW()
    T.leaf_count()
main()

推荐阅读