Доступ к переменным класса через экземпляр

В 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— нет....

Однако в этой части речь идет конкретно о методах, поэтому, вероятно, это не относится к общему случаю.

У меня такой вопрос: это задокументировано? Могу ли я положиться на такое поведение?

13
задан martineau 10 September 2019 в 23:48
поделиться