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