Курс Python → Проектирование Singleton с метаклассом

Для проектирования Singleton с использованием метакласса в Python, мы можем определить метакласс, который будет контролировать создание экземпляров класса. Метакласс — это класс, экземпляры которого сами являются классами. Мы можем определить метод __new__ в метаклассе, чтобы контролировать создание экземпляров класса.

class SingletonMeta(type):
    _instances = {}

    def __call__(cls, *args, **kwargs):
        if cls not in cls._instances:
            cls._instances[cls] = super().__call__(*args, **kwargs)
        return cls._instances[cls]

Затем мы можем определить наш класс, используя этот метакласс. Мы просто указываем metaclass=SingletonMeta в определении класса. Теперь при создании экземпляров этого класса, будет возвращаться один и тот же экземпляр.

class DatabaseConnection(metaclass=SingletonMeta):
    def __init__(self):
        print("Creating Database Connection")

Теперь, когда мы создаем экземпляры класса DatabaseConnection, каждый раз будет возвращаться один и тот же экземпляр. Это обеспечивает уникальность объекта и предотвращает создание дубликатов, что особенно полезно, например, при работе с соединениями к базе данных.

Пример использования:

db_conn1 = DatabaseConnection()
db_conn2 = DatabaseConnection()

print(db_conn1 is db_conn2)  # Выведет True, так как это один и тот же объект
Твои коллеги будут рады, поделись в

Автор урока

Дмитрий Комаровский
Дмитрий Комаровский

Автоматизация процессов
в КраснодарБанки.ру

Другие уроки курса "Python"

  1. Переворот списка в Python
  2. Использование подчеркивания в REPL
  3. Руководство по Pymorphy2
  4. Работа с YAML в Python
  5. Инициализация объекта
  6. Оператор морж в Python 3.8
  7. Объединение объектов в Python
  8. Ключевое слово global в Python
  9. Вычисление фазы комплексного числа
  10. Генераторы и сеты в Python
  11. Сокращение ссылок с pyshorteners
  12. Атрибуты класса и экземпляра в Python
  13. Расчет времени выполнения кода
  14. Комментарии в Python
  15. Использование двоеточия в Python
  16. Вызов внешних программ в Python с помощью sh
  17. Применение функций в Python
  18. Установка и использование Virtualenv
  19. Управление ресурсами с контекстными менеджерами
  20. inspect в Python: анализ кода
  21. Настройка вывода NumPy
  22. Основные операции с библиотекой Numpy
  23. Функция zip() в Python
  24. Повторение элементов в Python
  25. Создание и инициализация объектов
  26. Замена текста в Python
  27. %pinfo: получение информации об объекте
  28. Работа с рекламными данными в Pandas
  29. Работа с NumPy массивами
  30. Удаление символов новой строки в Python.
  31. Генераторы в Python
  32. Установка User-Agent в Python
  33. Изменение объектов в Python
  34. Сортировка слиянием
  35. Генерация QR-кодов с библиотекой qrcode
  36. Функциональное программирование.
  37. Построение графиков в Matplotlib
  38. Лямбда-функции в Python
  39. Работа со слайсами
  40. Сравнение неупорядоченных списков
  41. Добавление элементов в список
  42. Использование html-скриптов в Jupyter Notebook
  43. Вычисление логарифмов в Python
  44. Генератор списка в Python
  45. Создание функций высшего порядка
  46. Работа с GitHub в Telegram
  47. Модуль future Python
  48. Импорт в Python: список all

Marketello читают маркетологи из крутых компаний