Я был удивлен, узнав, что переменная класса подкласса не может получить доступ к переменной класса родителя без специального указания имени класса родителя:
>>> class A(object):
... x = 0
...
>>> class B(A):
... y = x+1
...
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 2, in B
NameError: name 'x' is not defined
>>> class B(A):
... y = A.x + 1
...
>>> B.x
0
>>> B.y
1
Почему это так, что при определении B.y я должен ссылаться на A.x, а не только на x? Это противоречит моей интуиции из переменных экземпляра, и поскольку я могу ссылаться на B.x после определения B.