Содержимое
Вернёмся к нашим классам. Что такое классы я рассказывала в этом посте. Если у кого-то остались вопросы по тому посту, присылайте их в бота. Итак, на этом этапе будем считать, что класс - это описание типа данных (пример на псевдокоде): class User { string name; int age; string phone; function say_hello() { print(«Hello! My name is {name}»); } } Для нас этот значит, что существует такой тип данных как User, у него есть такие атрибуты как имя (name), возраст (age) и номер телефона (phone). А еще у каждого объекта User можно вызвать метод say_hello, тогда на экране высветится приветствие и имя этого юзера. Класс - это некий шаблон, трафарет, с помощью которого мы создаём объекты нужного нам типа (объекты = экземпляры класса). Так как же создать объект с помощью класса? В некоторых языках, например в Java и C++, объекты класса создаются с помощью ключевого слова new. Создадим двух юзеров: user1 = new User() user2 = new User() В Python мы просто используем имя класса и скобки: user1 = User() Мы создали объекты, но эти объекты - пустые, мы не записали в них никаких данных - ни имя, ни возраст, ни телефон, поэтому пользы от них в таком виде мало. Чтобы создавать объекты сразу с нужными данными, нам нужен специальный метод (функция), который в момент создания объекта запишет в него все нужные данные. Такой метод называется конструктор. В C++ и Java метод-коструктор называется так же как сам класс, например (это всё еще псевдокод): class User { string name; int age; string phone; // метод-конструктор function User(user_name, full_age, phone_number) { name = user_name age = full_age phone = phone_number } } И теперь мы можем с помощью этого конструктора создавать объекты класса уже с данными: user1 = new User("Катя", 19, "9169989999") user2 = new User("Петя", 8, "9161234567") А в Python в качестве аналога конструктору мы используем метод init: class User: def __init__(self, user_name, full_age, phone_number): self.name = user_name self.phone = phone_number self.age = full_age user = User("Anna", 42, "9161234567") Первый аргумент self в Python обозначает сам объект (то есть новый юзер, которого мы создаем при вызове функции). Например, self.name = user_name - значит присвоить объекту поле name со значением user_name. В некоторых других языках с похожим смыслом используется ключевое слово this. Например, в Java конструктор может выглядеть так: public class User { string name; string number; int age; public User(String user_name, int full_age, String phone_number) { this.name = user_name; // this здесь не обязательно использовать, привожу для аналогии с self this.age = full_age; this.number = phone_number } } И напоследок: вернемся к самым первым примерам, где мы создавали объекты классов, но в самих классах не написали метод-конструктор, вот эти user = new User(). В таких случаях при создании объектов всё равно вызывается неявно метод-конструктор - он называется конструктором по умолчанию и в нём не используются аргументы. И если мы не определили его в коде сами, его за нас создаёт компилятор, сам.