2017-09-15 2 views
3

파이썬에서 트리를 구현하려고하지만 메소드 선언 내에 오류가 발생합니다.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과 관련이 있습니다. 다음 코드 조각을 고려 Test.method 클래스의 인스턴스가 이제까지 생성되어 있지 않은 경우에 무엇 self 어떤 생각이 얼마나

다음
class Test: 
    def method(self, arg='default argument'): 
     pass 

print(Test.method) # <unbound method Test.method> 
print(Test.method.__func__.func_defaults) # ('default argument',) 

? 대신 다음 패턴을 사용하는 것이 좋습니다.

def insert(self, data, root=None): 
    if root is None: 
     root = self.root 
    # ... 
관련 문제