遭遇"自我"在Python中

时间:2016-01-28 23:56:13

标签: python oop python-3.x binary-search-tree

我刚刚开始学习python,我正在尝试编写一个二叉搜索树。 Eclipse没有显示任何错误,但是当我尝试运行时出现ann错误

  

遭遇"自我"在第5行

第5行是:

  

" self.left = left"

有什么问题?我的编写代码的方式是什么?我刚刚出演了蟒蛇。

class Node:

    def _init_(self, data, left=None, right=None):
        self.data = data
        self.left = left
        self.right = right 

    def add_node(self, data):
        if self.data is None:
            node = Node(data)
            self = node
        if self.data > data:
            self.add_node(self.left, data)
        else:
            self.add_node(self.right, data)

    def print_nodes(self):
        if self.left is not None:
            self.print_nodes(self.left)
        print(self);
        if self.right is not None:
            self.print_nodes(self.right)

    def _str_(self):
        print(self.data)

class binary_tree:

    def _init_(self):
        self.root = None

    def getRoot(self):
        return self.root

    def add(self, data):
        self.root.add_node(data)

    def print_all(self):
        self.root.print_nodes();

1 个答案:

答案 0 :(得分:1)

这里有一些修复你的代码

"value": "' . $planPrice . '",

如前所述,python的特殊方法是class Node: def __init__(self, data, left=None, right=None): self.data = data self.left = left self.right = right def add_node(self, data): if self.data > data: if self.left is None: self.left = Node(data) else: self.left.add_node(data) elif self.data < data: if self.right is None: self.right = Node(data) else: self.right.add_node(data) def print_nodes(self): if self.left is not None: self.left.print_nodes() print(self); if self.right is not None: self.right.print_nodes() def __str__(self): return str(self.data) class binary_tree: def __init__(self): self.root = None def getRoot(self): return self.root def add(self, data): if self.root is None: self.root = Node(data) else: self.root.add_node(data) def print_all(self): if self.root is None: print("Empty tree") else: self.root.print_nodes() __init__,所有魔术方法都以__str__开头和结尾。

我修复了你的__,因为你的递归调用是错误的,你做add_node自我实例隐式传递为该函数的第一个参数,self.add_node(self.left,data)是第二个和{ {1}}第三个但是定义为add_node只接受2个参数,因此这是一个错误,因此在这种情况下,如果你想调用由self.left完成的data add_node并且同样适用于对类

的方法的每次其他调用

看看:

a first look at classes

basic customization and magic methods

此处使用此树的示例

self.left

另外一点是,你需要在python中定义getter或setter,除非你想控制属性的设置和方式,或者以一种与实际对象不同的特殊方式返回它。

在python的IDLE中或在交互模式下以self.left.add_node或您最喜欢的python解释器运行。