vault backup: 2026-05-30 19:03:22
This commit is contained in:
@@ -0,0 +1,68 @@
|
||||
---
|
||||
status: seed
|
||||
type: concept
|
||||
tags: [python, oop, classes, inheritance, polymorphism, encapsulation]
|
||||
created: 2026-05-30
|
||||
updated: 2026-05-30
|
||||
title: Основы объектно-ориентированного программирования
|
||||
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 находить вложенные модули.
|
||||
Reference in New Issue
Block a user