Инициализация.
Когда вы впервые входите на какой-нибудь сайт, вас обычно просят авторизоваться, но если у вас ещё нет учётной записи, вам необходимо её создать. Вы заполняете необходимые поля, такие как имя пользователя, пароль, e-mail, возраст и пр. И нажимаете кнопку «создать учётную запись». Именно в этот момент происходит инициализация, иными словами создание объекта класса пользователь. На каждом сайте есть база данных, которая хранит информацию о пользователях, которые прошли регистрацию на данном сайте. Другими словами — были инициализированы как пользователи. Когда мы создаём объекты в программировании мы можем перехватить момент создания(инициализации) объекта, для этого служит метод __init__(self):
Она предопределена внутри каждого класса. Объявите функцию с данным именем и теперь перед тем как будет создан объект класса, сначала будет выполнено тело метода __init__(self):
В качестве первого параметра всегда передаётся self — это ссылка на создаваемый нами объект. А если у нас есть ссылка на объект, значит мы можем присвоить ему определённые свойства прямо в момент создания. Для этого внутри функции необходимо прописать self.имя_свойства = значение. Количество свойств ничем не ограничивается, кроме фантазии автора. Кроме параметра self, метод __init__ может принимать сколько угодно параметров, которые вы называете самостоятельно. Но помните, все эти параметры(кроме self) необходимо передать в момент создания объекта точно в такой же последовательности, как вы их указали. Повторюсь, метод __init__ вызывать не нужно, он сам вызывается в момент создания класса, а self хранит в себе ссылку на создаваемый объект.
Встроенный метод __repr__(self): перехватывает событие презентации объекта т.е. вывод его на печать. Но давайте сконцентрируемся на том как правильно использовать __init__
Подклассы и суперклассы
В коде выше мы создали класс Car, описывающий свойства всех транспортных средств, у каждого автомобиля есть колёса, цвет, мощность двигателя. Но если мы захотим более детально описать какой-то класс авто, например, гоночный болид, или подъёмный кран, или автобус, то нам потребуются дополнительные свойства принадлежащие только этому подклассу. Чтобы не переписывать всё описание, мы можем воспользоваться главным классом Car и создать его разновидность используя следующий синтаксис.
Мы объявили новый класс Crane_car и указали в скобках его суперкласс. Теперь Crane_car является разновидностью класса Car и автоматически наследует все его свойства и методы. Ещё нам необходимо вызывать метод __init__ суперкласса.