2016-09-17 17 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のいずれかをお探しですか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

関連する問題