2

これが私がやろうとしていることの簡略化されたバージョンです:

class a():
    Requirement = 0
    def func(self, oldlist, x):
        newlist = [None]*3
        newlist = oldlist
        newlist[x]  = b()
        print "Class a"
        g(newlist)


class b():
    Requirement = 1


def g(list):
    for i in range(3):
        if list[i].Requirement==0:
            list[i].func(list,i)

Initiallist=[None]*3
Initiallist[0]=a()
Initiallist[1]=b()
Initiallist[2]=a()
g(Initiallist)      

私が期待していることを言葉で表現しようとする代わりに、私の頭の中で起こるべきことを表す図をいくつか作成しました。

ここに画像の説明を入力

これは、クラス a 内の関数を 4 回呼び出す必要があることを意味します。ただし、2回しか呼び出されないため、これが起こっているようです:

ここに画像の説明を入力

なぜこれが起こっているのか、どのように修正すればよいのかわかりません。

4

2 に答える 2

5

よくわかりませんが、あなたの問題は次の行だと思います:

newlist = oldlist

私はあなたがリストをコピーしたい(そして変更したくないoldlist)と思うので、単に使用する必要があります:

newlist = oldlist[:]

だからにfunc変更

def func(self, oldlist, x):
    newlist = oldlist[:]
    newlist[x] = b()
    print "".join(x.__class__.__name__ for x in newlist)
    g(newlist)

版画

bba
bbb
abb
bbb

于 2013-02-01T12:44:58.363 に答える