Паттерн «Стратегия» (Strategy)
Коротко: Паттерн «Стратегия» инкапсулирует взаимозаменяемые алгоритмы за общим интерфейсом, чтобы поведение объекта можно было переключать во время выполнения.
Подробнее: Вместо длинных цепочек if/else или switch объекту передают «стратегию», выполняющую настоящую работу, — например, разные расчёты сортировки, цены или стоимости доставки. Новые стратегии добавляются без изменения существующего кода (принцип открытости/закрытости, см. SOLID).
Подробности
def no_discount(price): returnСм. также: SOLID, полиморфизм, паттерн «Фабрика», паттерн «Наблюдатель»