2016-06-17 5 views
-1

일부 데이터 구조와 알고리즘을 Python으로 닦아서 순서가 지정되지 않은 링크 된 목록을 구현하고 있습니다. 동일한 파일 내에서 먼저 Node 클래스 다음에 List 클래스를 작성했습니다. 내가 얻지 못하는 것은 search_item() 메서드의 "현재"변수가 노드 객체이거나 노드 클래스의 메소드와 속성에 최소한 액세스 할 수있는 것입니다. 내가 add_node() 메소드를 주석 처리하면 "현재"는 더 이상 Node의 메소드에 액세스 할 수 없다는 것을 알았다. 이제는 상속이나 컴포지션을 명시 적으로 사용하지 않고 있으므로 코드가 아래에 작성된 방식으로 get_next()를 호출하는 방법을 보는 데 어려움을 겪고 있습니다. 나는 현재로 선언해야 할 것 : current = Node (self.head)하지만 현재 = self.head는 작동하는 것 같습니까? 도움을 주시면 대단히 감사하겠습니다.일부 컴포지션 측면을 이해하지 못했습니다.

class Node: 
    def __init__(self, data): 
     self.data = data 
     self.next = None 

    def get_data(self): 
     return self.data 

    def set_data(self, d): 
     self.data = d 

    def get_next(self): 
     return self .next 

    def set_next(self, n): 
     self.next = n 

class UnorderedList: 
    def __init__(self): 
     self.head = None 

    def add_node(self, item): 
     tmp = Node(item) 
     tmp.set_next(self.head) 
     self.head = tmp 

    def search_item(self, item): 
     current = self.head 
     # current = Node(self.head) 
     found = False 
     while current != None and not found: 
      if current.get_data() == item: 
       found = True 
      else: 
       current = current.get_next() 
     return found 
+0

사례가 상속되지 않습니다. 그렇다면 어떤 상속 측면을 이해하지 못하고 있습니까? 질문을 변경할 수 있습니까? – olivecoder

+0

@olivecoder, 올바른, 내 원래 게시물에서 언급했듯이 명시 적으로 상속 또는 구성을 사용하지 않고 있지만 어떻게 든 UnorderedList (노드)를 선언 한 다음 현재 = Node (self.head)를 인스턴스화하는 대신 current = self.head Node의 메소드에 대한 현재 액세스를 제공하며 이유를 이해하고자합니다. 희망이 내 질문을 지 웁니다. – tjbadr

+0

TBadr. 명시 적 또는 암시 적으로 상속을 사용하지 않고 있습니다 (?). 질문은 상속 관계가 없습니다. 코드를 따라갈 수 없습니다. 여기서 개념은 상속이 아니라 구성이라고 말할 수 있지만 전혀 문제가되지 않습니다. 그래서 나는 당신의 질문에 대한 편집을 제안하려고 노력했지만 제목을 상상할 수는 없었습니다. 확실히 현재가 아닙니다. – olivecoder

답변

0

그럼 당신은 당신이 더 이상 그러므로 search_item 항상 None입니다 self.head의 초기 값을 볼 수있는 연결된 목록에 노드를 추가하지 add_node을 주석 처리합니다. add_node를 통해 항상 None 또는 tmp = Node(item) 만든 다음 self.head = tmp에 할당 Nodetmp로의 인스턴스에 그 중 하나 self.head 점을 보장하기 때문에

current.get_next()를 호출하면 바로 작동합니다. 따라서 current = self.head으로 설정하면 이미 Node (또는 None)의 인스턴스를 참조하므로 current = Node(self.head)에 전화 할 필요가 없습니다.

+0

답장을 보내 주셔서 감사합니다 @ DAXaholic. 파일 (Stack)에 세 번째 클래스를 추가하여 설명을 테스트하고 Stack 인스턴스를 가리키는 List 클래스 내에 dummy 메서드를 추가했습니다. 나는 self.head가 하나 이상의 유형의 객체를 가리키면 "현재"가 무엇을 집어나는지보고 싶었다. 이상한 점은 "current"는 Node 클래스의 메소드와 속성을 호출하는 순서와 상관없이 속성을 선택한다는 것이고 스택 메소드와 속성을 선택하는 유일한 방법은 self.head가 Node 객체. – tjbadr

+0

self.head를 클래스 내의 다른 유형의 객체로 설정하여 추가 실험을했습니다. 그런 다음 특정 var = self.head를 설정하면 우리에게 정의 된 첫 번째 객체의 유형을 취합니다 (내 경우에는 self.head = tmp를 통해 Node 객체). 그렇지 않으면 남아 있습니다. NoneType. 당신의 도움을 주셔서 감사합니다. – tjbadr