estoy confundido acerca de este comportamiento alcance:extraña función de Python comportamiento alcance
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")
Esto le da a la salida:
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
Pero lo que habría esperado que func_wrapper
siempre habría la función correcta. Sé que el alcance de func_wrapper
es para toda la función, pero la redefino en cada iteración de bucle y la última instancia se guardó en attrib. También traté de agregar func_wrapper = None
debajo del setattr
pero eso no ayuda (también me habría preguntado ...).
¿Estoy ciego? Ni siquiera veo cómo solucionarlo/arreglarlo.
@heltonbiker: ¿Pueden dar más detalles? ¿Cómo debería usar un dict en su lugar aquí? ¿Y por qué? – Albert
He leído más a fondo y he eliminado el comentario anterior. – heltonbiker