2

再帰を使用する必要があるメソッドを実装しようとしていますが、毎回、global name not definedMy class look like this というエラーが表示されます。

class MyClass(object):
    def _init_(self, name=None, content=None):
        self.name = name
        self.content = content

それはノードクラスであり、名前は単なるテキスト文字列であり、内容はその子のリスト (ノードでもあります) として初期化されますNoneが、ツリーを構築する構築関数は、子がない場合は空白のリストを与えます。クラスは正常に機能し、関数も正常に機能しますが、メソッドに再帰を追加しようとすると、スタンドアロン関数として正常に機能しても機能しません。つまり、次のようになります。

def get_nodes(self):
    c = [] 
    c.append(self.name)
    if self.content != []:
        for a in self.content:
            c.extend(get_nodes(a))
    return c

これが可能であることはわかっていますが、何が間違っていますか?

4

1 に答える 1

4

あなたがする必要がありますa.get_nodes()

また、初期化メソッドは__init__, not _init_(両端に 2 つのアンダースコア) と呼ばれます。

編集: コードを表示しない場合、コードの何が問題なのかはわかりません。このコードは私のために働きます:

class MyClass(object):
    def __init__(self, name=None, content=None):
        self.name = name
        self.content = content
    def get_nodes(self):
        c = [] 
        c.append(self.name)
        if self.content != []:
            for a in self.content:
                c.extend(a.get_nodes())
        return c

>>> n = MyClass('me', [])
>>> m = MyClass('other', [n])
>>> m.get_nodes()
['other', 'me']

コードが機能しない場合は、コードがそれとどのように異なるかを説明する必要があります。

于 2012-12-02T20:52:49.010 に答える