Ответ
Основное различие заключается в их области видимости и жизненном цикле.
- Переменная класса (Class Variable): Принадлежит самому классу. Существует в единственном экземпляре и является общей для всех объектов этого класса.
- Переменная экземпляра (Instance Variable): Принадлежит конкретному объекту (экземпляру) класса. У каждого объекта свой собственный набор таких переменных.
Пример:
class Dog:
# Переменная класса: общая для всех собак
species = "Canis familiaris"
def __init__(self, name):
# Переменная экземпляра: уникальна для каждой собаки
self.name = name
# Создаем два экземпляра
dog1 = Dog("Рекс")
dog2 = Dog("Шарик")
# Изменение переменной класса влияет на все экземпляры
print(f"Вид Рекса: {dog1.species}") # Вид Рекса: Canis familiaris
Dog.species = "Домашний волк"
print(f"Новый вид Шарика: {dog2.species}") # Новый вид Шарика: Домашний волк
# Изменение переменной экземпляра затрагивает только один объект
dog1.name = "Гром"
print(f"Новое имя dog1: {dog1.name}") # Новое имя dog1: Гром
print(f"Имя dog2 осталось прежним: {dog2.name}") # Имя dog2 осталось прежним: Шарик
Сводная таблица
| Характеристика | Переменная класса | Переменная экземпляра |
|---|---|---|
| Область видимости | Общая для всех экземпляров класса | Уникальна для каждого экземпляра |
| Определение | В теле класса, вне методов | Внутри методов (обычно __init__) через self |
| Хранение | В атрибуте __dict__ класса |
В атрибуте __dict__ экземпляра |
| Основное применение | Константы, счетчики, общие для всех атрибуты | Уникальные свойства и состояние каждого объекта |