Tome el siguiente código:"variable local a la que se hace referencia antes de la asignación": ¿solo funciones?
import something
def Foo():
something = something.SomeClass()
return something
... esto es al parecer código no válido:
UnboundLocalError: local variable 'something' referenced before assignment
... como la variable local se crea something
, pero no asignado, antes de que el lado derecho de la =
se evalúa . (Ver, por ejemplo, this related answer's comment.) Esto me parece un poco extraño, pero claro, lo haré. Ahora, ¿por qué es el siguiente código válido?
class Foo(object):
something = something.SomeClass()
Mi entendimiento es que el interior de una definición class
era esencialmente un ámbito de aplicación:
conjunto de la clase se ejecuta entonces en un nuevo marco de ejecución (véase la sección de nombres y vinculante), utilizando una nueva espacio de nombres local creado y el espacio de nombres global original.
Entonces, ¿por qué ese código actúa de forma diferente a la de una función?
'something' parece tener más de un significado? – Johnsyweb
@Johnsyweb: Sí, tipo de. Pero en ambos casos, tiene el mismo tipo de más de un significado. (O, al menos, todos los documentos que he leído parecen decir eso). – Thanatos