Sono confuso su questo comportamento portata:strano comportamento portata funzione 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")
Questo dà l'output:
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
Ma mi sarei aspettato che func_wrapper
sarebbe sempre il corretto funzionamento. So che l'ambito di func_wrapper
riguarda l'intera funzione, ma lo ridefinisco in ogni iterazione del ciclo e l'ultima istanza è stata salvata nell'attrib. Ho anche provato ad aggiungere func_wrapper = None
sotto lo setattr
ma questo non aiuta (mi avrebbe anche chiesto ...).
Sono cieco? Non vedo nemmeno davvero come aggirare/risolvere questo problema.
@heltonbiker: puoi elaborare? Come dovrei usare un dict invece qui? E perché? – Albert
Ho letto più a fondo e ho eliminato il commento precedente. – heltonbiker