Возьмите следующий код:
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
было по существу областью:
Затем класс классов выполняется в новом кадре выполнения (см. раздел "Именование и привязка" ), используя недавно созданное локальное пространство имен и исходное глобальное пространство имен.
Итак, почему этот код действует иначе, чем функция?