Module (33%)
Section (33%)

Переменные класса

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

Примечание: переменная экземпляра не существует, если в классе нет объекта; переменная класса существует в одной копии, даже если в классе нет объектов.

Переменные класса создаются не так, как их экземпляры. Пример расскажет Вам больше:

class ExampleClass: counter = 0 def __init__(self, val = 1): self.__first = val ExampleClass.counter += 1 example_object_1 = ExampleClass() example_object_2 = ExampleClass(2) example_object_3 = ExampleClass(4) print(example_object_1.__dict__, example_object_1.counter) print(example_object_2.__dict__, example_object_2.counter) print(example_object_3.__dict__, example_object_3.counter)


Посмотрите:

  • в первом списке определения класса есть присваивание - переменной counter присваивается значение 0; инициализация переменной внутри класса, но вне любого из его методов делает переменную переменной класса;
  • доступ к такой переменной выглядит так же, как доступ к любому атрибуту экземпляра - Вы можете увидеть его в теле конструктора; как видите, конструктор увеличивает переменную на единицу; по сути, переменная считает все созданные объекты.
 

Запуск кода приведет к следующему выводу:

{'_ExampleClass__first': 1} 3 {'_ExampleClass__first': 2} 3 {'_ExampleClass__first': 4} 3

output

Из этого примера вытекают два важных вывода:

  • переменные класса не отображаются в __dict__ объекта (это естественно, поскольку переменные класса не являются частями объекта), но Вы всегда можете попытаться заглянуть в переменная с тем же именем, но на уровне класса - мы покажем Вам это очень скоро;
  • переменная класса всегда представляет одно и то же значение во всех экземплярах класса (объектах).