使用Python实现树的错误

时间:2017-09-15 18:54:01

标签: python inheritance

我正在尝试用Python实现一个树,但是我在方法声明中遇到了一个错误。

我认为这是由于我使用的自我实例:

class Node:

   def __init__(self, data=None, l=None, r=None):
       self.data = data
       self.l = l
       self.r = r

class Tree:
   def __init__(self):
       self.root = Node()

我正在尝试发送一个节点进行插入,但如果没有发送,我想用根

引用它
  def insert(self,data,root1=self.root):
      '''function definition'''

t = Tree()
t.insert(1)

2 个答案:

答案 0 :(得分:3)

你不能在方法签名中使用self,该类不知道如何处理它,因为self只定义了里面方法(感谢第一个参数)。

您可以使用以下模式:

def insert(self, data, root1=None):
    if root1 is None:
        root1 = self.root
    else:
        [...]

答案 1 :(得分:2)

在定义类时创建实例方法,并将默认参数作为成员数据添加到未绑定方法。这一切都发生在可以实例化类之前,因此没有这样的自我引用。这与普通mutable default argument issue切线相关。请考虑以下代码:

class Test:
    def method(self, arg='default argument'):
        pass

print(Test.method) # <unbound method Test.method>
print(Test.method.__func__.func_defaults) # ('default argument',)

在这里,Test.method如何在没有创建类的实例时知道self是什么意思?相反,您可能希望使用以下模式:

def insert(self, data, root=None):
    if root is None:
        root = self.root
    # ...