ООП в Python

Программы часто моделируют вещи из реального мира: банковский счёт, пользователя, машину. У каждой такой вещи есть данные (баланс, имя, скорость) и действия (внести деньги, представиться, ускориться).

Первый пример

Опишем класс Car и создадим по нему две машины. В синтаксис пока не вглядывайтесь: и class, и __init__, и self по шагам разберёт следующая глава. Сейчас важна форма: данные и действия описаны в одном месте.

Python 3.13
class Car:
    def __init__(self, make, model):
        self.make = make
        self.model = model
        self.is_running = False

    def start_engine(self):
        self.is_running = True
        return f"{self.make} {self.model}: двигатель запущен"

    def stop_engine(self):
        self.is_running = False
        return f"{self.make} {self.model}: двигатель остановлен"

my_car = Car("Toyota", "Corolla")
another_car = Car("Honda", "Civic")

print(another_car.start_engine())
Honda Civic: двигатель запущен
print(my_car.is_running)
False
print(another_car.is_running)
True

Двигатель запустили только у второй машины, и is_running поменялся только у неё. В этом суть: из одного класса создаётся сколько угодно объектов, и у каждого свои данные.

Класс и объект

классCar
make = model = is_running =
start_engine()stop_engine()
Car("Toyota", "Corolla")
объектmy_car
make = "Toyota"model = "Corolla"is_running = False
Car("Honda", "Civic")
объектanother_car
make = "Honda"model = "Civic"is_running = True

Термины, которыми это описывают:

  • Carкласс: шаблон, по которому создаются объекты
  • my_car, another_carобъекты (экземпляры) этого класса
  • make, model, is_runningатрибуты: данные объекта
  • start_engine(), stop_engine()методы: действия объекта

Четыре принципа ООП

ООП традиционно строится на четырёх концепциях. Каждой дальше посвящён отдельный урок (абстракцию разберём внутри урока про полиморфизм), так что пока хватит одной фразы о каждой:

  1. Инкапсуляция — упаковка данных и методов, которые с этими данными работают, в один объект. Внешний код не лезет в детали реализации, а работает через интерфейс класса.
  2. Наследование — создание нового класса на основе существующего с переиспользованием его атрибутов и методов.
  3. Полиморфизм — возможность работать с объектами разных классов через единый интерфейс (одинаково вызвать .area() у круга, квадрата и треугольника).
  4. Абстракция — выделение существенных характеристик объекта, скрытие неважных деталей.

Проверка понимания

Чем класс отличается от объекта?

Следующая глава — «Классы»: разберём весь синтаксис, который здесь мелькнул, шаг за шагом.