--- status: seed type: concept tags: [python, oop, classes, inheritance, polymorphism, encapsulation] created: 2026-05-30 updated: 2026-05-31 title: Основы ООП в Python source: ["[[oop.pdf]]"] --- # Основы ООП в Python **ООП** — методология, в основе которой лежат понятия **класса** (шаблон) и **объекта** (экземпляр). ## Четыре столпа ООП 1. **Абстракция:** Выделение ключевых характеристик объекта и отсечение незначимых. 2. **Инкапсуляция:** Сокрытие внутренней логики и данных. В Python реализуется соглашением об именовании: - `_name`: "защищенный" (не рекомендуется трогать вне класса). - `__name`: "приватный" (имя искажается для предотвращения прямого доступа). 3. **Наследование:** Создание новых классов на базе существующих. Все классы наследуются от `object`. 4. **Полиморфизм:** Возможность использовать разные типы данных через единый интерфейс. - *Полиморфизм подтипов:* Использование потомка вместо родителя. - *Параметрический:* Обработка данных любого типа (например, `len()`). - *Ad-hoc:* Перегрузка функций (в Python через разные аргументы). --- ## Работа с классами ```python class Rectangle: default_color = "green" # Атрибут класса (статический) def __init__(self, width, height): self.width = width # Атрибут экземпляра self.height = height def area(self): # Метод экземпляра return self.width * self.height @classmethod def change_color(cls, color): cls.default_color = color @staticmethod def hint(): print("Это прямоугольник") ``` ### Специальные методы (Магические методы) - `__init__`: Инициализатор (вызывается после создания объекта). - `__new__`: Конструктор (вызывается для создания экземпляра). - `__str__`: Строковое представление (для `print()`). --- ## Наследование ```python class Square(Rectangle): def __init__(self, side): super().__init__(side, side) # Вызов родительского инициализатора ``` - `super()` — ссылка на родительский класс. --- ## Модули и пакеты - **Модуль:** Любой `.py` файл. Подключается через `import`. - **Пакет:** Папка с файлом `__init__.py`. Помогает Python находить вложенные модули.