Декоратор

описание
Декоратор — структурный шаблон проектирования, предназначенный для динамического подключения дополнительного поведения к объекту. Шаблон декоратор предоставляет гибкую альтернативу практике создания подклассов с целью расширения функциональности.

Шаблон декоратор позволяет вам динамически изменять поведение объекта во время работы, оборачивая их в объект класса декоратора.

Пример
Рассмотрим пример создания функциональности текстовой разметки. У нас существует объекты тегов, к которым можно применять классы декораторы цвета и начертания.

Это позволяет расширять программный код различными стилями и тегами, не изменяя созданные объекты. Новая функциональность будет появляться при декорировании объектов одного типа Tag

from abc import ABC
from dataclasses import dataclass


class Tag(ABC):
    def __str__(self):
        return ''


@dataclass
class H1(Tag):
    size: int = 14

    def __str__(self):
        return f'Заголовок размером {self.size}'


@dataclass
class Link(Tag):
    site: str = 'http'

    def __str__(self):
        return f'Ссылка на сайт {self.site}'


@dataclass
class Color(Tag):
    tag: Tag
    color: str

    def __str__(self):
        return f'{self.tag} цветом {self.color}'


@dataclass
class Stile(Tag):
    tag: Tag
    inscription: str = 'Normal'

    def __str__(self):
        return f'{self.tag} начертание *{self.inscription}*'


if __name__ == '__main__':
    title = H1()
    print(title)

    red_h1 = Color(title, 'red')
    print(red_h1)

    red_half_transparent_square = Stile(red_h1, 'Курсив')
    print(red_half_transparent_square)

Вывод
  • Декоратор (класс, функция) сохраняет ссылку на декорированный объект
  • Содержит служебные атрибуты и методы для расширения или изменения возможностей объекта (без изменения объекта)
  • В Python есть функциональные декораторы, которые обертывают функции.