ZANIN блог
Контакты
Крути вниз
Фильтр по:
//Post title

Паттерн Декоратор на Python

30 Июн 2021Категория : Python

Паттерн Декоратор на Python

Практический пример применения паттерна Декоратор на языке Python (ссылка на код Декоратора: хотя в статье добавлю небольшие нюансы).

Изначально у меня написан пример на PHP в предыдущей статье, возможно кому-то будет проще понять этот паттерн сначала на PHP, а уже потом на Python. Так как реализация некоторых моментов в Python отличается.

Изначально нам надо создать общий интерфейс, но в Python создается просто класс.

Python декоратор

После этого надо создать класс, который реализует этот интерфейс, но по сути просто наследует созданный класс и переопределяет базовое поведение метода на стандартное. То есть, теперь стандартное поведение метода, это принять строку, в которой сериализованный на PHP массив и отдать обратно объект, но в Python это словарь.

Python декоратор

После этого мы создаем основной класс декоратора, который также наследует интерфейс (не забываем, что это класс в python).

Python декоратор

Про этот класс можно написать подробнее. До конструктора класса мы определяем приватную переменную _select_type, ее начальное значение и тип. Так как приватности в Python нет, то нижнее подчеркивание или dundr в начале имени переменной рекомендует считать ее приватной. Далее декоратором @property мы декорируем метод, который в данном случае позволяет создать аналог геттера. (Геттер(метод) используется для получение доступа к приватному члену класса). Данная приватная переменная в конструкторе класса должна быть объектом класса, который реализует указанный интерфейс, но в данном случае - должна быть объектом класса, который наследует указанный класс.

Теперь создаем основные декораторы: для статических атрибутов и вариативных атрибутов товаров в Woocommerce. Каждый из них реализует свой функционал.

Python декоратор

Python декоратор

В каждом из этих декораторов у меня присутствует класс DynamicDict. Хороший пример реализации словаря, чтобы динамически наполнять его ключами и значениями. То есть, если бы мы взяли стандартный dict, то он бы выдавал при таком подходе ошибку KeyError.

Реализация данного динамически наполняемого словаря.

Python декоратор

Но это просто интересный пример. А по сути в Python уже есть реализация такого словаря. Все что для этого необходимо, это импортировать defaultdict из пакета collection (для Python 3, в Python 2 он был доступен без импорта).

Изменяем декораторы с использованием defaultdict

Python декоратор

Python декоратор

Теперь реализуем основной класс, который может служить контроллером для отдачи данных на фронтенд или других целей.

Python декоратор

  • 687

01. Об авторе

Александр Занин

Занимаюсь разработкой на Django,
а также бэкенд разработкой на PHP (Laravel, Slim).

Find on :

02. Свежие статьи

Готовы заказать проект?

© ZANIN 2019 / All rights reserved.
Контакты
Close