Курс 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. Измерение времени выполнения кода
  2. Печать календаря
  3. Деление в Python
  4. Переменные класса и экземпляра
  5. Defaultdict в Python
  6. Математические функции в Python
  7. Удаление символа из строки
  8. Игра «Угадывание чисел»
  9. Оператор «or» в Python
  10. Удаление символов новой строки в Python.
  11. Работа с YAML в Python
  12. Метод ior для битовых операций
  13. Лямбда-функции в Python
  14. Оператор zip в Python
  15. Создание новых функций через partial
  16. Избегайте изменяемых аргументов
  17. Python: цикл for и оператор присваивания
  18. Генерация QR-кодов с Python
  19. Функция с **kwargs в Python
  20. Оценка точности модели
  21. Работа с файлами в Python
  22. Получение текущего времени в Python
  23. Работа с файлами в Python
  24. Обработка StopIteration в Python
  25. Объединение словарей в Python
  26. Numpy: разбиение массивов
  27. Работа с модулем os в Python
  28. Поиск индекса элемента
  29. SciPy: широкий функционал для математических операций
  30. Многострочные комментарии в Python
  31. Работа с необработанными строками
  32. Поиск индексов в списке
  33. Извлечение статей с newspaper3k
  34. Модуль future Python
  35. Метод rpow в Python
  36. Библиотека itertools: объединение списков
  37. Создание пустых функций и классов в Python
  38. Использование *args
  39. Определение функций с необязательными аргументами
  40. Разделение функций на этапы
  41. Преобразование текста в нижний регистр
  42. Библиотека sh: удобные команды терминала
  43. Списковое включение в Python
  44. Поиск частых элементов в списке
  45. Метод setdefault() в Python
  46. Объединение словарей в Python
  47. Объединение кортежей в Python

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