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?

questionAnswers(4)

yourAnswerToTheQuestion