Курс 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. Объединение списков в Python.
  2. Открытие и запись файлов
  3. Перетасовка списков в Python
  4. Логические значения в Python
  5. Основные операции с библиотекой Numpy
  6. Функция enumerate() — Python
  7. Инверсия списка и строки
  8. Работа с датой и временем в Python
  9. Реализация операции -= для пользовательского класса
  10. Хранение данных
  11. Создание новых списков через list comprehensions
  12. Шаблоны Flask: условия и циклы
  13. Именованные срезы в Python
  14. Объединение списков с использованием itertools.chain
  15. Использование двоеточия в Python
  16. Поиск индекса элемента
  17. Передача аргументов в Python
  18. Изменение элемента списка
  19. Оптимизация интернирования строк
  20. Оператор (*) в Python
  21. Метод gt в Python
  22. Сортировка с параметром key
  23. Форматирование строк в Python
  24. Создание тестовых данных с Faker
  25. Удаление дубликатов с сохранением порядка с помощью dict.fromkeys
  26. Библиотека wikipedia для Python
  27. Работа с асинхронными задачами в Python
  28. Работа с итераторами в Python
  29. Объединение объектов в Python
  30. Инвертирование словаря
  31. Модуль pprint: улучшение вывода данных
  32. Подписка на SelectelNews в Twitter
  33. Необязательные аргументы в Python
  34. Отслеживание выполнения программы с библиотекой tqdm
  35. Проверка элементов списка условием
  36. Сумма элементов списка
  37. Создание уникального множества
  38. Enum в Python
  39. Отправка HTTP-запросов с User-Agent
  40. Создание треугольника Паскаля
  41. Нахождение отличий в списках
  42. Рекурсия для обращения строки
  43. Python Менеджер контекста
  44. Удаление ключа из словаря
  45. Работа с модулем random
  46. Создание веб-приложения с Flask
  47. Генерация случайных данных в NumPy
  48. Операторы += в Python

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