Как в Python создать переменную класса

«Как в Python создать переменную класса» — вопрос из категории ООП, который задают на 10% собеседований Python Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Переменная класса в 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