Добро пожаловать на первый этап нашего большого пути освоения объектно-ориентированного программирования (ООП)! Сегодня мы сделаем важный шаг вперед и напишем наш первый класс, положив начало нашему проекту — системе управления виртуальной библиотекой. Наша цель — познакомиться с основными понятиями ООП и понять, как создаются и используются классы и объекты в Python.
Начнём с простого примера — создадим класс `Book`. Представьте себе простую электронную книжку, хранящую название, автора и год издания. Вот каким будет наш самый простой класс:
Теперь давайте разберём подробнее каждую строчку.
Что такое класс и объект класса
Класс — это шаблон для создания объектов. Объект — это экземпляр класса, обладающий своими уникальными характеристиками и поведением. Например, книга — это класс, а каждая отдельная книга («Война и мир», «Преступление и наказание») — это объект.
Наш класс называется `Book`, и он определяет общие характеристики и поведение для всех книг, которые будут созданы на его основе.
Метод-конструктор `__init__`
Метод `__init__` является конструктором класса. Когда мы создаём новый объект, автоматически вызывается конструктор, чтобы задать начальное состояние объекта. Именно здесь определяются поля класса — свойства, которыми обладает объект.
У каждого объекта класса `Book` будут три поля:
- `title`: Название книги.
- `author`: Автор книги.
- `year`: Год публикации книги.
Каждая строка вида `self.<поле>` присваивает значение соответствующему полю объекта. Переменная `self` используется для обращения к самому объекту внутри методов класса.
Создаем метод `info` для получения информации о книге
Это обычный метод класса, который возвращает строку с информацией о книге. Здесь мы используем специальную конструкцию строки формата `f-string`, которая позволяет вставлять значения прямо внутрь строки.
Например, вот как выглядит вывод информации о книге:
book = Book("Мастер и Маргарита", "Михаил Булгаков", 1967)
print(book.info()) # Выведет: Мастер и Маргарита, Михаил Булгаков, 1967
Для примера вывели по отдельности все поля класса Book и полную информацию, как раз наглядная работа созданного нами конструктора.
Подробнее о конструкции self и доступе к полям класса
Чтобы глубже погрузиться в тему и лучше понимать, как работают классы и методы в Python, предлагаю внимательно рассмотреть механизм доступа к полям объекта через ключевое слово self.
Что такое self?
self — это специальная переменная, автоматически передаваемая первым аргументом любому методу класса. Она ссылается на сам объект, которому принадлежит этот метод. Благодаря этому внутри методов класса можно обращаться к внутренним данным (полям) и другим методам конкретного объекта.
Когда вы вызываете метод объекта, интерпретатор Python подставляет ссылку на объект в качестве первого параметра, и эта ссылка доступна через self.
Как вызываются поля объекта?
Рассмотрим наш метод info() чуть внимательнее:
def info(self):
return f"{self.title}, {self.author}, {self.year}"
Здесь self.title, self.author и self.year обращаются к соответствующим полям текущего объекта. Эти поля были определены ранее в конструкторе класса:
__init__(self, title, author, year):
self.title = title
self.author = author
self.year = year
При создании нового объекта типа Book, скажем:
book = Book("Анчар", "Александр Пушкин", 1828)
Переменные title, author и year, указанные при вызове конструктора, становятся значениями соответствующих полей объекта book. Затем метод info() получает доступ к этим полям через self, возвращая сформированную строку:
print(book.info()) # выведет: Анчар, Александр Пушкин, 1828
внимание, что когда вы вызываете метод, не нужно передавать аргумент для self. Интерпретатор делает это автоматически. Например:
my_book = Book("Евгений Онегин", "Александр Пушкин", 1831)
result = my_book.info() # вызов info(), где self автоматически установлен как my_book
F-строки (форматированные строки)
Строка формата, использованная в методе info(), записана следующим образом:
return f"{self.title}, {self.author}, {self.year}"
современная конструкция Python, называемая f-строкой (formatted string). Внутри фигурных скобок {...} помещаются выражения, которые автоматически преобразуются в строки и вставляются на своё место. Таким образом, мы можем удобно формировать динамические строки, включающие данные из объекта. Эта техника позволяет избежать длинных цепочек конкатенации и делает код гораздо чище и понятнее.
Итоги первого шага учебного проекта по созданию класса Book в системе управления виртуальной библиотекой книг
Итак, мы сделали первые шаги в нашем проекте. Теперь вы знаете, как создать базовый класс, определить его поля и добавить метод для отображения информации. Уже на этом этапе видно, насколько мощной становится ваша разработка, когда вы начинаете применять объектно-ориентированный подход.
Что дальше? Следующий этап ждёт впереди: мы продолжим углубляться в тему ООП и перейдем к защите данных и управлению доступом к свойствам объектов. Оставайтесь с нами, ведь самое интересное ещё впереди!
Продолжайте практиковать и совершенствовать свои навыки вместе с нашим проектом!
Наши шаги
- Мы на этом шаге