В 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'
[snip]
... По определению, все атрибуты класса, являющиеся функциональными объектами, определяют соответствующие методы его экземпляров. Итак, в нашем примере
x.f
является допустимой ссылкой на метод, посколькуMyClass.f
является функцией, аx.i
— нет, посколькуMyClass.i
— нет....
Однако в этой части речь идет конкретно о методах, поэтому, вероятно, это не относится к общему случаю.
У меня такой вопрос: это задокументировано? Могу ли я положиться на такое поведение?