В Python переменные класса могут быть доступны через этот экземпляр класса:
>>> class A(object):
... x = 4
...
>>> a = A()
>>> a.x
4
Легко показать, что a.x
действительно разрешено a.x
, а не копируется в экземпляр во время построения:
>>> A.x = 5
>>> a.x
5
Несмотря на то, что это поведение хорошо известно и широко используется, я не смог найти окончательную документацию, охватывающую его. Наиболее близким, которое я мог найти в документах Python, был раздел в классах:
class MyClass: """A simple example class""" i = 12345 def f(self): return 'hello world'
[надрез]
... По определению все атрибуты класса, которые являются объектами-объектами, определяют соответствующие методы его экземпляров. Поэтому в нашем примере
x.f
является допустимым методом, так какMyClass.f
является функцией, ноx.i
не является, так какMyClass.i
не является....
Однако в этой части речь идет конкретно о методах, поэтому она, вероятно, не относится к общему случаю.
Мой вопрос в том, что это документировано? Могу ли я полагаться на это поведение?