Атрибуты класса и экземпляра
У объектов бывают данные двух видов: общие для всех объектов класса и личные у каждого. Разберём разницу.
Атрибут экземпляра — личный
Атрибут экземпляра задаётся через self (обычно в __init__) и свой у каждого объекта. У одного дрона имя «Пинг», у другого «Бип» — это атрибуты экземпляра, они не пересекаются.
Атрибут класса — общий
Атрибут класса задаётся прямо в теле класса и общий для всех объектов. Например, максимальная скорость, одинаковая для всех дронов, или счётчик созданных объектов.
class Drone:
kind = 'фермер' # атрибут класса (общий)
def __init__(self, name):
self.name = name # атрибут экземпляра (личный)
Когда что использовать
Личные данные объекта (имя, баланс, позиция) — атрибуты экземпляра. Общие константы и значения, одинаковые для всех, — атрибуты класса. Путаница между ними — частый источник багов, поэтому различать их важно.
Частые вопросы
Где хранится имя объекта? В атрибуте экземпляра, через self.
Изменится ли атрибут класса для всех? Да, если менять его у класса; поэтому изменяемые данные там держать опасно.
Начать игру бесплатно