Python Singleton

Python Singleton

Junior Python School

Хочется написать продвинутую заметку о python. Попробуй ее прочитать, а если не получается - прочитай последний абзац, там мы выписали список тем, которые необходимо изучить, чтобы хорошо разобраться в теме. Сейчас можешь просто сохранить себе где-то эту заметку, но мы ждем твоего возвращения)

О паттернах проектирования слышал каждый. Это настолько полезные инструменты, что их встраивают в языки программирования и фреймворки. Уж про декоратор и итератор в python слышал каждый питонист. Конечно, у них не классическая реализация, а более продвинутая, но это ни капельки не уменьшает важность знания шаблонов проектирования.

Еще один паттерн?

Одиночка (англ. Singleton) — порождающий паттерн проектирования, гарантирующий, что у класса будет ровно один экземпляр и класс предоставит глобальную точку доступа к этому экземпляру.

Очень часто, когда говорят про этот паттерн, вторую половину про глобальную точку доступа опускают. Это ведь один из самых тривиальных паттернов. У него очень простая идея, поэтому реализаций у него очень много. Рассмотрим мы всего лишь две из них, но это самые интересные реализации на python, по-нашему мнению: с помощью декоратора и используя метакласс.

Декоратор и Одиночка?

Реализация через декоратор

Ничего сложного, если немного разобраться в происходящем.
Просто теперь, когда мы вызываем MyClass(value), то вызывается функция get_instance, а не конструктор. Потому что декоратор превратил MyClass из класса в функцию singleton(MyClass) == get_instance.

Как пользоваться реализацией.

Метакласс и Одиночка?

Реализация через Метакласс

Разобраться с метаклассами - это большой шаг вперед в понимании работы python. Это хороший пример использования метаклассов. Во-первых, мы не ломаем логику MyClass. Во-вторых, сделать из любого класса синглтон стало очень просто.


Для того, чтобы круто разбираться в проектировании систем, глубокое понимание работы языка программирования просто необходимо. Мы рекомендуем вам уделять этому внимание, и будем стараться помочь вам.



Чтобы хорошо понять примеры выше - просто необходимо:


1) Знать базовый синтаксис python
2) Знать основы ООП.
3) Знать основные магические методы python. Порядок их обхода.
4) Нужно понимать что такое декоратор, уметь написать собственный декоратор.
5) Нужно понимать что такое метакласс. Как он работает и зачем нужен.


Будет большим плюсом:
1) Понимать, что такое паттерны проектирования. Знать несколько.
2) Хорошо понимать, как устроен ООП в python.
3) Попытаться реализовать синглтон самостоятельно.

Report Page