私はこのスコープの振る舞いについて混乱しています:
class Bar:
def __init__(self):
for fn in ["open","openW","remove","mkdir","exists","isdir","listdir"]:
print "register", fn
def func_wrapper(filename):
print "called func wrapper", fn, filename
setattr(self, fn, func_wrapper)
bar = Bar()
bar.open("a")
bar.remove("b")
bar.listdir("c")
これにより、次の出力が得られます。
register open
register openW
register remove
register mkdir
register exists
register isdir
register listdir
called func wrapper listdir a
called func wrapper listdir b
called func wrapper listdir c
しかし、私はそれfunc_wrapper
が常に正しい機能であると思っていたでしょう。のスコープが関数全体に及ぶことは知っていますfunc_wrapper
が、ループの反復ごとに再定義すると、最後のインスタンスが属性に保存されます。func_wrapper = None
私も下に追加しようとしましたsetattr
が、それは役に立ちません(私も不思議に思ったでしょう...)。
私は盲目ですか?これを回避/修正する方法すらわかりません。