Files
SecondBrain/90 Library/Programming/Python/Основы объектно-ориентированного программирования.md
T
2026-05-31 10:08:46 +03:00

69 lines
3.1 KiB
Markdown

---
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 находить вложенные модули.