Возьмите следующий код:
import something
def Foo():
something = something.SomeClass()
return something
… это явно недействительный код:
UnboundLocalError: local variable 'something' referenced before assignment
… поскольку локальная переменная что-то
создается, но не назначается перед правой частью =
оценивается. (См., Например, комментарий к соответствующему ответу .) Мне это кажется немного странным, но, конечно, я пойду с этим. Теперь, почему следующий допустимый код?
class Foo(object):
something = something.SomeClass()
Насколько я понимаю, внутренняя часть определения класса
была, по сути, областью действия:
Затем набор классов выполняется в новом фрейме выполнения (см. Раздел Именование и привязка), используя только что созданное локальное пространство имен и исходное глобальное пространство имен.
Итак, почему этот код действует иначе, чем код функции?