Курс 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. Метод lt для сортировки объектов
  3. Блок else в циклах.
  4. Метаклассы в Python
  5. Python union() функция — объединение множеств
  6. Поиск уникальных и повторяющихся элементов
  7. Избегайте пустого списка
  8. Обработка исключений в Python 3
  9. Colorama: окрашивание текста в Python
  10. Метод __call__ в Python
  11. Форматирование строк в Python
  12. Удаление символов новой строки в Python.
  13. Отправка POST запроса на сервер.
  14. Иерархия классов в Python
  15. Блок else в обработке исключений
  16. Генерация QR-кодов с Python
  17. Конкатенация строковых литералов
  18. Повторение элементов в Python
  19. Декораторы в Python
  20. Метод remove() для удаления элемента из списка
  21. Копирование списков в Python
  22. Перевод двоичного кода в целое число
  23. Работа с библиотекой requests
  24. Получение комбинаций в Python
  25. Идентификатор объекта в Python
  26. Python Метод sleep() из time
  27. Замыкания в Python
  28. Документирование функций в Python
  29. Многопоточность и асинхронное программирование в Python
  30. Python enumerate() для работы с индексами
  31. Эффективная конкатенация строк с использованием join()
  32. Установка Python — Простое руководство
  33. Создание уникального множества
  34. Переопределение метода __or__()
  35. Подсчет элементов в Python
  36. Глубокое копирование объектов
  37. Переворот строки с использованием цикла
  38. Обновление шаблона base.html
  39. Принципы программирования
  40. Управление контекстом выполнения
  41. Работа с множествами в Python
  42. Управление асинхронными задачами на Python.
  43. Создание виртуальной среды
  44. Цикл for в Python
  45. Ограничение итераций в Python

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