Курс 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. Обновление и получение данных в SQLite
  2. Управление ресурсами в Python
  3. Получение срезов итераторов
  4. Область видимости переменных
  5. Операции с матрицами в Python
  6. Сортировка данных с лямбда-функциями
  7. Использование html-скриптов в Jupyter Notebook
  8. Декораторы с @wraps
  9. Инициализация переменных
  10. Поиск самого длинного слова в списке с использованием max()
  11. Python Метод Union Множеств
  12. Генераторы в Python
  13. Взаимодействие с внешними процессами в Python
  14. Декоратор total_ordering для класса Point
  15. Работа с коллекциями Python
  16. Создание даты из строки ISO
  17. F-строки в Python
  18. Форматирование данных с помощью pprint
  19. Декоратор защиты анонимных пользователей
  20. Работа с индексами списков
  21. Модуль subprocess: запуск внешних команд
  22. Тернарный оператор в Python
  23. Перезагрузка оператора в Python
  24. Методы classmethod и staticmethod
  25. Работа с путями в Python
  26. Метод __ixor__ для побитового исключающего ИЛИ
  27. Аргумент по умолчанию
  28. Экспорт функций в Python
  29. Метод join() для объединения элементов строки
  30. Работа с URL-адресами в Python
  31. Сортировка HTML-элементов
  32. Создание задания в Cron
  33. Обработка данных в Python
  34. Метод __ilshift__ для битового сдвига влево
  35. Удаление дубликатов из списка с помощью dict.fromkeys
  36. Установка Python — Простое руководство
  37. Декораторы в Python
  38. Сортировка в Python
  39. Python reversed() функция
  40. Конкатенация строк в Python
  41. Функция all() в Python
  42. Регулярные выражения в Python
  43. Лямбда-функции в Python
  44. Конкатенация списков в Python
  45. Блок else в Python
  46. Нан-рефлексивность в Python
  47. Просмотр внешнего файла в Python

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