Терминология#
Интерфейс — набор атрибутов и методов, которые реализуют определенное поведение. Примеры: итератор, менеджер контекста, последовательность.
Наследование (Inheritance)#
Наследование — концепция ООП, которая возволяет дочернему классу использовать компоненты (методы и переменные) родительского класса.
Как правило, для наследования есть две основные причины:
В Python синтаксис наследования используется с абстрактными классами для наследования интерфейса/протокола. Кроме того, синтаксис наследования используется с Mixin.
Агрегирование (Aggregation)#
Агрегация (агрегирование по ссылке) — отношение «часть-целое» между двумя равноправными объектами, когда один объект (контейнер) имеет ссылку на другой объект. Оба объекта могут существовать независимо: если контейнер будет уничтожен, то его содержимое — нет.
Композиция (Composition)#
Композиция (агрегирование по значению) — более строгий вариант агрегирования, когда включаемый объект может существовать только как часть контейнера. Если контейнер будет уничтожен, то и включённый объект тоже будет уничтожен.
from jinja2 import Environment, FileSystemLoader env = Environment(loader=FileSystemLoader('templates')) template = env.get_template('router_template.txt')
Полиморфизм (Polymorphism)#
Как правило, различают два варианта полиморфизма:
- способность функции/метода обрабатывать данные разных типов
- один интерфейс — много реализаций. Пример: одно и то же имя метода в разных классах
Метакласс (Metaclass)#
Метакласс — это класс экземпляры которого тоже являются классами.
Абстрактный класс (abstract class)#
Абстрактный класс — базовый класс, который не предполагает создания экземпляров. Как правило, содержит абстрактные методы — методы, которые обязательно должны быть созданы в дочерних классах.
В Python абстрактные классы часто используются для создания интерфейса/протокола.
Примесь (Mixin)#
Примесь это класс, который реализует какое-то одно ограниченное поведение (метод).
В Python примеси делаются с помощью классов. Так как в Python нет отдельного типа для примесей, классам-примесям принято давать имена заканчивающиеся на Mixin.