Ответ
Переменная класса в Python — это атрибут, который принадлежит самому классу, а не его отдельным экземплярам. Она является общей для всех объектов этого класса и используется для хранения данных, которые не должны меняться от экземпляра к экземпляру, например, констант или счетчиков.
Создание и доступ:
Переменная объявляется непосредственно в теле класса. Доступ к ней возможен как через имя класса, так и через любой его экземпляр.
class Car:
# Переменная класса, общая для всех машин
wheels = 4
def __init__(self, model):
# Переменная экземпляра
self.model = model
# Доступ через класс
print(f"У класса Car {Car.wheels} колеса.")
# Доступ через экземпляры
bmw = Car("BMW")
audi = Car("Audi")
print(f"У {bmw.model} {bmw.wheels} колеса.")
print(f"У {audi.model} {audi.wheels} колеса.")
Ключевое отличие от переменных экземпляра:
При попытке изменить переменную класса через экземпляр, создается новая переменная экземпляра с тем же именем, которая "затеняет" (shadows) переменную класса. Исходная переменная класса остается неизменной.
# Изменим переменную через экземпляр
bmw.wheels = 5
print(f"У {bmw.model} теперь {bmw.wheels} колес.") # 5
print(f"А у {audi.model} по-прежнему {audi.wheels} колеса.") # 4
print(f"У класса Car все еще {Car.wheels} колеса.") # 4
# Изменение через класс влияет на все экземпляры, у которых нет своей переменной
Car.wheels = 6
print(f"Теперь у {audi.model} {audi.wheels} колес.") # 6
print(f"А у {bmw.model} все еще {bmw.wheels} колес, т.к. у него своя переменная.") # 5