繁体   English   中英

使用Python实现树的错误

[英]Error in tree implementation with Python

我试图在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()

我试图发送一个节点插入,但如果没有发送,我想用root引用它

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

t = Tree()
t.insert(1)

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

您可以使用如下模式:

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

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

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
    # ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM