2017-09-15 11 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

私の質問は自己にできません。機能にはアクセスできません –

答えて

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が何であるか任意のアイデアを持っているでしょうか?代わりに、次のパターンを使用したいと思うかもしれません: