Regras de escopo da classe Python
EDITAR: Parece que este é um "bug" muito antigo ou, na verdade, um recurso. Veja, por exemplo,este e-mail
Estou tentando entender as regras de escopo do Python. Mais precisamente, pensei que os entendesse, mas depois encontrei esse códigoaqui:
x = "xtop"
y = "ytop"
def func():
x = "xlocal"
y = "ylocal"
class C:
print(x)
print(y)
y = 1
func()
No Python 3.4, a saída é:
xlocal
ytop
Se eu substituir a classe interna por uma função, ela razoavelmente forneceUnboundLocalError
. Você poderia me explicar por que ele se comporta dessa maneira estranha com as classes e qual é o motivo dessa escolha de regras de escopo?