2016-09-17 1 views
0
내가 파이썬에 새로 온 사람

:파이썬 개체하지 호출

만든 클래스 :

class NodeStruct: 
"""Struct to hold node data for search trees""" 

    def __init__(self, name, children, parent_name, edge_weight): 
     self.name = name 
     self.childNodes = children 
     self.parent = parent_name 
     self.weight = edge_weight 

    def name(self): 
     return self.name 

    def parent(self): 
     return self.parent 

    def path_cost(self): 
     return self.weight 

    def children(self): 
     return self.childNodes 

    def child_keys(self): 
     return self.childNodes.keys() 

인스턴스화 :

this_node = NodeStruct(start, problem[start], 'root', 0) 

문제점 : 나는 이름에 전화를 걸 때()

name = this_node.name() 

다음과 같은 오류가 발생합니다. :

TypeError: 'str' object is not callable 

마치 직설적 인 것처럼 보입니다. 무엇이 누락 되었습니까?

+0

당신은 생성자'self.name = name'의 메소드를 덮어 쓰는 중입니다. –

답변

2

name 중 어느 하나를 찾으십니까? this_node.name()을 찾으십니까?

 self.name = name 
     # ... 

    def name(self): 
     return self.name 

이 솔루션은 self._name에 속성의 이름을 변경할 가능성이 높습니다 :

 self._name = name 
     # ... 

    def name(self): 
     return self._name 
4

당신이 당신의 클래스를 정의 할 때, name는 기능입니다. 그래도 인스턴스화하자 마자 __init__이 호출되며 name은 전달 된 값 (이 경우 문자열)으로 즉시 설정됩니다. 함수의 이름은 다른 객체의 이름과 별도로 유지되지 않습니다. 고유 한 이름을 사용하십시오.

+0

처음에는 대답했지만, @ ev-br의 코드 예제는 제가 좀 더 이해할 수 있도록 도와 주었지만, 너는 나간다. – jbolt