Курс 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. Методы classmethod и staticmethod
  4. Управление ресурсами с контекстными менеджерами
  5. Метод rmatmul для обратного матричного умножения
  6. JMESPath в Python
  7. Оптимизация интернирования строк
  8. Перетасовка списков в Python
  9. Метод rrshift для пользовательских объектов
  10. Автоматизация действий с Pyautogui
  11. Переопределение метода delitem в Python
  12. Генераторы в Python
  13. Работа с argparse
  14. Список методов и атрибутов
  15. Инициализация переменных
  16. Команда %dhist — список посещенных каталогов
  17. Python Аргументы по умолчанию
  18. Блок else в циклах Python
  19. Объединение списков в Python
  20. Преобразование кортежа в словарь.
  21. Работа со строками
  22. Строки в Python: апострофы и кавычки
  23. Проверка типа объекта в Python
  24. Анонимные функции Lambda
  25. Операторы Splat и splatty-splat
  26. Оператор continue в Python
  27. Упрощение работы с JSON-данными в Python
  28. Создание именованных кортежей в Python
  29. Работа с URL-адресами в Python
  30. Подсчет количества элементов в списке
  31. Преобразование документов в PDF с помощью Spire.Office
  32. Генераторы в Python
  33. Лямбда-функции для min/max
  34. Операторы объединения в Python 3.9
  35. Генерация случайных данных в NumPy
  36. Документация функции help() в Python
  37. Логирование с Logzero
  38. Применение команды break
  39. Создание пользовательской коллекции в Python
  40. Именование переменных в Python
  41. Пропуск начальных строк с помощью dropwhile()
  42. Перевод эмодзи и эмотиконов.
  43. Расчет времени выполнения
  44. Метод __int__ в Python
  45. Создание словаря в Python
  46. Управление виртуальными окружениями в Python

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