Курс 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. Получение ID текущего процесса
  2. Распаковка аргументов в Python
  3. Удаление элементов во время итерации
  4. Удаление файлов в Python
  5. Наиболее частотные элементы с помощью Counter
  6. Функции all() и any() в Python
  7. Возврат нескольких значений
  8. Нахождение пересечения множеств
  9. Явный импорт в Python
  10. Именованные аргументы в Python
  11. Обработка ошибок в Python
  12. Синхронизация доступа к ресурсам
  13. Метод rxor для операции побитового исключающего «или»
  14. Подписка на каналы разработчиков
  15. Метод bool() в Python
  16. Функции-генераторы в Python
  17. Циклы в Python
  18. Генерация случайных чисел в Python
  19. Структуры данных в Python
  20. Разрешение имен в Python
  21. Отступы в Python
  22. Отладка кода
  23. Передача параметров в Python
  24. Атрибуты объекта в Python
  25. Работа с IP-адресами в Python
  26. Создание матрицы в Python
  27. Преобразование текста в нижний регистр
  28. Списковое включение в Python
  29. Работа с каталогами в Python
  30. Декоратор total_ordering для сравнения объектов
  31. Группировка элементов Python
  32. Преобразование регистра строк
  33. Работа с zip-архивами в Python
  34. Проблема сравнения словарей
  35. Удаление элементов из списка в Python
  36. Генераторы в Python
  37. Функция enumerate() в Python
  38. Проверка типа объекта в Python
  39. Цикл for в Python
  40. PUT запрос для обновления данных
  41. Передача аргументов через **arguments
  42. Оптимизация памяти с slots
  43. Извлечение чисел из текста
  44. Получение обратного списка чисел

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