2017-09-15 36 views
3

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

我試圖發送一個節點插入,但如果沒有發送我想與根

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

t = Tree() 
t.insert(1) 
引用它
+0

我的問題是我可以不self.root到功能是不可訪問的 –

回答

3

你不能在方法簽名裏面使用self,這個類不知道如何處理它,因爲self只是定義了裏面的這個方法(得益於第一個參數)。

你可以使用一個圖案類似如下:定義一個類時創建

def insert(self, data, root1=None): 
    if root1 is None: 
     root1 = self.root 
    else: 
     [...] 
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 
    # ...