[英]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.