Курс 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. Распаковка с оператором *
  3. Метод split() в Python
  4. Асинхронное выполнение задач в Python
  5. Выражения-генераторы в Python
  6. Модуль itertools: эффективная работа с итераторами
  7. Удаление первого элемента списка
  8. Проверка подстроки в строке с помощью in
  9. Метод splitlines() для разделения строк
  10. Создание вложенных циклов for
  11. EMOT преобразование эмодзи в текст
  12. Создание треугольника Паскаля
  13. Big O оптимизация
  14. Капитализация строк
  15. Работа с типами данных в Python с помощью pydantic.
  16. Декораторы в Python
  17. Принципы Zen of Python
  18. Изменение элемента списка
  19. Округление в Python
  20. Упрощение условных выражений с тернарным оператором
  21. Работа со строками в Python
  22. Управление памятью в Python
  23. Преобразование строк в числа в Python
  24. Параллельные вычисления в Python
  25. Оптимизация сравнения в Python
  26. Вставка переменных в шаблоны Flask
  27. Конвертация текстовых чисел с помощью Numerizer
  28. Работа с буфером обмена на Python
  29. Декоратор Ajax required
  30. Выборка чисел
  31. Python Translator: создание локальных переводчиков
  32. Dict Comprehension в Python
  33. Иерархия классов в Python
  34. Профилирование данных с Pandas.
  35. Изменение списка срезами
  36. Работа с контекстными менеджерами
  37. Магические методы в Python
  38. Создание уникального множества
  39. Мониторинг работы программы Py-spy
  40. Многопоточность в Python
  41. Особенности множеств в Python
  42. Работа с очередями в Python
  43. Извлечение новостей с помощью newspaper3k
  44. Метод Self в Python
  45. Вычисление фазы комплексного числа
  46. Сортировка в Python
  47. Импорт в Python: список all
  48. Работа с кортежами в Python

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