- ru
- Language: en
- Documentation version: latest
Переменные класса
Помимо переменных экземпляра, существуют также переменные класса. Они создаются, при указании переменных внутри самого класса, не метода:
In [27]: class A:
...: var_a = 5
...:
...: def method(self):
...: pass
...:
Теперь не только у класса, но и у каждого экземпляра класса будет
переменная var_a
:
In [40]: A.var_a
Out[40]: 5
In [30]: a1 = A()
In [31]: a1.var_a
Out[31]: 5
In [32]: a2 = A()
In [33]: a2.var_a
Out[33]: 5
Важный момент при использовании переменных класса, то что внутри метода к ним все равно надо обращаться через имя класса (или self, но через имя класса лучше, так как тогда понятно, что это переменная класса). Для начала, вариант обращения без имени класса:
In [37]: class A:
...: var_a = 5
...:
...: def method(self):
...: print(var_a)
...:
In [38]: a1 = A()
In [39]: a1.method()
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
<ipython-input-39-921b8753dbee> in <module>()
----> 1 a1.method()
<ipython-input-37-ef925c4e39d3> in method(self)
3
4 def method(self):
----> 5 print(var_a)
6
NameError: name 'var_a' is not defined
И правильный вариант:
In [47]: class A:
...: var_a = 5
...:
...: def method(self):
...: print(A.var_a)
...:
In [48]: a1 = A()
In [49]: a1.method()
5