2016-09-17 75 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