Курс 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. Работа с рекламными данными в Pandas
  3. Форматирование строк с % в Python
  4. Проверка класса объекта
  5. Логирование с Logzero
  6. Создание таблиц в Python с PrettyTable
  7. Удаление дубликатов из списка с помощью dict.fromkeys
  8. Работа с файлами в Python
  9. Скачать видео с YouTube
  10. Генераторы данных
  11. Глобальные переменные в Python
  12. Удаление ресурса в Python
  13. Работа с множествами в Python
  14. Каналы Senior: Python, Java, Frontend, SQL, C++
  15. Сериализация и десериализация объектов
  16. Enum в Python
  17. Работа с файлами в Python
  18. Создание .exe файла с pyinstaller
  19. Анализ текста на русском языке с помощью Pymystem3
  20. Оптимизация сравнения в Python
  21. Итерация по коллекции в Python
  22. Функция с *args.
  23. Создание пустых функций и классов в Python
  24. Руководство по библиотеке pydantic
  25. Переопределение метода __floordiv__
  26. Сортировка данных в Python
  27. Абстракции словарей и множеств в Python
  28. Функция zip() в Python
  29. Инверсия списка и строки
  30. Хранение данных
  31. List Comprehension Tutorial
  32. Выражения-генераторы в Python
  33. Python Enum Weekday Usage
  34. Управление виртуальными окружениями в Python
  35. Методы сравнения множеств
  36. Операторы Splat и splatty-splat
  37. Справка по импортированным модулям
  38. Оператор «моржа» (Walrus Operator)
  39. Удаление символа из строки
  40. Замена атрибута в именованном кортеже
  41. Работа с файловой системой в Python
  42. Конвертация коллекций в Python.
  43. Гибкие функции Python
  44. Итераторы в Python
  45. Генератор списка с условием if
  46. Проверка типа объекта в Python
  47. Сериализация объектов в Python
  48. globals и locals

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