2016-09-17 77 views
0

我是新來的Python:Python對象不可調用的

創建了一個類:

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 s您認爲可以找到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