Курс 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. Назначение максимального и минимального значения переменной в Python.
  3. Сравнение объектов в Python
  4. Функция с **kwargs в Python
  5. Перемешивание списка с shuffle()
  6. Генератор бросков кубиков
  7. Генерация случайных чисел Python
  8. Установка Python — Простое руководство
  9. Поиск самого частого элемента
  10. Удаление файлов и папок в Python
  11. Декораторы для регистрации функций
  12. Объявление переменных в Python
  13. Импортирование в Python
  14. Управление асинхронными задачами на Python.
  15. Генерация тестовых данных с factory_boy
  16. Цикл while в Python
  17. Модуль Operator в Python
  18. Создание и использование модулей в Python
  19. Python union() функция — объединение множеств
  20. Поиск HTML-элементов с BeautifulSoup
  21. Объединение списков в строку
  22. Форматирование данных с помощью pprint
  23. Объединение словарей в Python
  24. Импорт в Python: список all
  25. %pinfo: получение информации об объекте
  26. Генераторы в Python
  27. Исправление ошибки NameError
  28. Вложенные генераторы в Python
  29. Генератор списка с условием if
  30. Метод enumerate() в Python
  31. Декораторы в Python
  32. Метод __int__ в Python
  33. Шаблоны и наследование в Flask
  34. Комментарии в Python
  35. Изменение IP-адреса в Python
  36. Область видимости переменных
  37. Генераторы списков в Python
  38. Поиск анаграмм с Counter
  39. Defaultdict в Python
  40. Создание матрицы в Python
  41. Создание списков в Python
  42. Модуль itertools: комбинации и перестановки
  43. Компиляция регулярных выражений
  44. Работа с очередями в Python
  45. Преобразование PowerPoint в PDF.
  46. Генераторы словарей и множеств
  47. Декодирование байтов в строку
  48. Создание словаря в Python

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