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