Переменные класса
Переменная класса - это свойство, которое существует только в одной копии и хранится вне любого объекта.
Примечание: переменная экземпляра не существует, если в классе нет объекта; переменная класса существует в одной копии, даже если в классе нет объектов.
Переменные класса создаются не так, как их экземпляры. Пример расскажет Вам больше:
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__
объекта (это естественно, поскольку переменные класса не являются частями объекта), но Вы всегда можете попытаться заглянуть в переменная с тем же именем, но на уровне класса - мы покажем Вам это очень скоро; - переменная класса всегда представляет одно и то же значение во всех экземплярах класса (объектах).