«локальная переменная, на которую ссылаются до присвоения» - только функции?

Возьмите следующий код:

import something

def Foo():
    something = something.SomeClass()
    return something

… это явно недействительный код:

UnboundLocalError: local variable 'something' referenced before assignment

… поскольку локальная переменная что-то создается, но не назначается перед правой частью = оценивается. (См., Например, комментарий к соответствующему ответу .) Мне это кажется немного странным, но, конечно, я пойду с этим. Теперь, почему следующий допустимый код?

class Foo(object):
    something = something.SomeClass()

Насколько я понимаю, внутренняя часть определения класса была, по сути, областью действия:

Затем набор классов выполняется в новом фрейме выполнения (см. Раздел Именование и привязка), используя только что созданное локальное пространство имен и исходное глобальное пространство имен.

Итак, почему этот код действует иначе, чем код функции?

11
задан Community 23 May 2017 в 12:33
поделиться