O escopo dos nomes definidos no bloco de classes não se estende aos blocos dos métodos. Por que é que
Lendo odocumentaçã Me deparei com o seguinte parágrafo:
Um escopo define a visibilidade de um nome dentro de um bloco. Se uma variável local é definida em um bloco, seu escopo inclui esse bloco. Se a definição ocorrer em um bloco de funções, o escopo se estende a todos os blocos contidos no bloco de definição, a menos que um bloco contido introduza uma ligação diferente para o nome. O escopo dos nomes definidos em um bloco de classes é limitado ao bloco de classes; não se estende aos blocos de código dos métodos - inclui compreensões e expressões geradoras, pois são implementadas usando um escopo de funçã
ecidi tentar acessar a variável de classe a partir de um métod
>>> class A():
i = 1
def f(self):
print(i)
>>> a = A()
>>> a.i
1
>>> a.f()
Traceback (most recent call last):
File "<pyshell#7>", line 1, in <module>
a.f()
File "<pyshell#4>", line 4, in f
print(i)
NameError: global name 'i' is not defined
Sei que a variáveli
pode ser acessado apontando explicitamente para o nome da classeA.i
:
>>> a = A()
>>> class A():
i = 1
def f(self):
print(A.i)
>>> a = A()
>>> a.f()
1
A questão é por que os desenvolvedores da linguagem tornaram variáveis de classe não visíveis nos métodos? Qual é a lógica por trás disso?