Курс 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. Создание именованных кортежей в Python
  3. Поиск уникальных элементов строкой в Python
  4. Проблема сравнения словарей
  5. Сравнение объектов в Python
  6. Логические значения в Python
  7. Сравнение def и lambda функций в Python
  8. Инициализация переменных
  9. Фильтрация списка чисел
  10. Работа с zip-архивами в Python
  11. Настройка Cron
  12. Распаковка элементов массива
  13. Работа с итераторами через срезы
  14. Сумма элементов списка
  15. Метод join() для объединения элементов
  16. Настройка вывода в Numpy
  17. Генератор списка в Python
  18. Оператор Walrus: правильное использование
  19. Преобразование регистра символов
  20. Разность множеств
  21. Передача аргументов в Python
  22. Использование метода lower()
  23. Выбор редактора кода.
  24. Декораторы в Python
  25. Форматирование данных с помощью pprint
  26. Использование модуля __future__
  27. Преобразование многоуровневого словаря
  28. Разделение функций на этапы
  29. Работа с парами ключ-значение
  30. Тип данных TypeVarTuple
  31. Скачать видео с YouTube
  32. Операции с комплексными числами
  33. Проверка на истинность объектов в Python
  34. Управление сессиями в Python
  35. GitHub в Telegram: подписка на уведомления
  36. Реверс строки в Python
  37. Исключение NotImplementedError
  38. Транспонирование 2D-массива с помощью zip
  39. Методы сравнения множеств
  40. Регулярные выражения: метод match
  41. Распаковка элементов последовательности
  42. Работа с каталогами в Python
  43. Декораторы с @wraps
  44. Lambda Functions in Python
  45. Преобразование Word в PDF с Spire.Doc
  46. Создание словарей в Python
  47. Pillow: работа с изображениями
  48. Оптимизация памяти с __slots__
  49. Экспорт данных с помощью writefile
  50. Форматирование объектов с модулем pprint

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