我正在尝试用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)
答案 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
# ...