Курс 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. Вакансии в Nebius
  2. Исправление ошибки NameError
  3. Избегание циклических зависимостей классов в Python
  4. Проверка кортежей.
  5. Искажение имен в Python
  6. Функция zip() в Python
  7. Библиотека sh: удобные команды терминала
  8. Проверка вхождения подстроки
  9. Numpy: разбиение массивов
  10. Разделение строки в Python
  11. Декораторы с @wraps
  12. Операции с числами в Python
  13. Поиск анаграмм с Counter
  14. Условные выражения в Python
  15. Любовь к Python
  16. Перезапуск ячейки в Jupyter Notebook с dostoevsky
  17. Метод matmul для умножения матриц
  18. Преобразование символов с помощью map
  19. Импорт классов из другого файла
  20. Деление в Python
  21. Удаление дубликатов из списка с помощью dict.fromkeys
  22. Тернарный оператор в Python
  23. Проверка файла .py на синтаксис.
  24. Чтение бинарного файла в Python.
  25. Отношения подклассов в Python
  26. Протокол управления контекстом
  27. Хранение данных
  28. Применение функции к элементам списка
  29. Форматирование строк в Python
  30. Метод rename() для переименования файлов и каталогов
  31. Оператор (*) в Python
  32. Сравнение строк в Python
  33. Функциональное программирование.
  34. Функция map() и ленивая оценка
  35. Установка и использование Logzero
  36. Работа с срезами в Python
  37. Ввод нескольких значений
  38. Принципы программирования
  39. Работа с итераторами через срезы
  40. Динамическая типизация в Python
  41. Defaultdict в Python
  42. Ускорение кода с помощью векторизации
  43. Определение относительного пути
  44. Показ всплывающих окон Tkinter
  45. Расчет времени выполнения

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