Терминология#

Интерфейс/Протокол (Interface/Protocol)#

Интерфейс - набор атрибутов и методов, которые реализуют определенное поведение. Примеры: итератор, менеджер контекста, последовательность.

Наследование (Inheritance)#

Наследование - концепция ООП, которая возволяет дочернему классу использовать компоненты (методы и переменные) родительского класса.

Как правило, для наследования есть две основные причины:

  • создание подтипа (interface inheritance)

  • наследование для использования кода

В Python синтаксис наследования используется с абстрактными классами для наследования интерфейса/протокола. Кроме того, синтаксис наследования используется с Mixin.

Принцип подстановки Барбары Лисков

Агрегирование (Aggregation)#

Агрегация (агрегирование по ссылке) — отношение «часть-целое» между двумя равноправными объектами, когда один объект (контейнер) имеет ссылку на другой объект. Оба объекта могут существовать независимо: если контейнер будет уничтожен, то его содержимое — нет.

Композиция (Composition)#

Композиция (агрегирование по значению) — более строгий вариант агрегирования, когда включаемый объект может существовать только как часть контейнера. Если контейнер будет уничтожен, то и включённый объект тоже будет уничтожен.

from jinja2 import Environment, FileSystemLoader

env = Environment(loader=FileSystemLoader('templates'))
template = env.get_template('router_template.txt')

Полиморфизм (Polymorphism)#

Как правило, различают два варианта полиморфизма:

  1. способность функции/метода обрабатывать данные разных типов

  2. один интерфейс - много реализаций. Пример: одно и то же имя метода в разных классах

Метакласс (Metaclass)#

Метакласс - это класс экземпляры которого тоже являются классами.

Абстрактный класс (abstract class)#

Абстрактный класс - базовый класс, который не предполагает создания экземпляров. Как правило, содержит абстрактные методы - методы, которые обязательно должны быть созданы в дочерних классах.

В Python абстрактные классы часто используются для создания интерфейса/протокола.

Примесь (Mixin)#

Примесь это класс, который реализует какое-то одно ограниченное поведение (метод).

В Python примеси делаются с помощью классов. Так как в Python нет отдельного типа для примесей, классам-примесям принято давать имена заканчивающиеся на Mixin.