我很困惑這個範圍的行爲:奇怪的Python的功能範圍的行爲
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
的範圍是整個函數,但我在每次循環迭代中重新定義它,並且最後一個實例被保存在屬性中。我也試着在setattr
下面添加func_wrapper = None
,但這並沒有幫助(也想知道我......)。
我瞎了嗎?我甚至不知道如何解決這個問題。
@heltonbiker:你能詳細點嗎?我應該如何在這裏使用字典?爲什麼? – Albert
我已經讀得更徹底,並刪除了以前的評論。 – heltonbiker