Курс 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. Сохранение и загрузка модели в PyTorch
  2. Просмотр атрибутов и методов класса
  3. PrettyTable: создание таблицы
  4. Удаление элемента из списка
  5. Повторение элементов в Python
  6. Работа с временем в Python
  7. Область видимости переменных
  8. Оператор zip в Python
  9. Возведение в квадрат с помощью itertools
  10. Сравнение объектов в Python
  11. Метод join() для объединения элементов
  12. Вычисление логарифмов в Python
  13. Оптимизация памяти с __slots__
  14. Оптимизация параметров в Python
  15. Генерация случайных чисел в Python
  16. Округление чисел с помощью round
  17. Сортировка данных с лямбда-функциями
  18. Измерение времени выполнения с помощью time
  19. Переопределение метода sub
  20. Antigravity модуль
  21. Работа с изображениями Pillow
  22. Определение основы слова с showballstemmer
  23. Руководство по Pymorphy2
  24. Работа с timedelta
  25. Замена переменных в Python
  26. Установка и использование модуля «howdoi»
  27. Параллельные вычисления в Python
  28. Генераторы в Python
  29. Модуль xkcd: добавление юмора в Python
  30. Метод rxor для операции побитового исключающего «или»
  31. Обработка исключений в Python
  32. Цепные операции в Python
  33. Обмен данными с asyncio.Queue
  34. Избегайте изменяемых аргументов
  35. Философия Python
  36. Многострочные комментарии в Python
  37. Логирование в Python
  38. Переворот строки
  39. Декоратор total_ordering для сравнения объектов
  40. Работа с изменяемыми коллекциями
  41. Создание циклической ссылки
  42. Логирование с Logzero: ротация файла
  43. Хранение данных
  44. Подсказки типов в Python
  45. Метод getitem для доступа к элементам последовательности
  46. TypedDict для kwargs в Python 3.12
  47. Создание уникального множества

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