Курс 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. Генерация QR-кодов с Python
  3. Создание треугольника Паскаля
  4. Создание списка дат
  5. EMOT преобразование эмодзи в текст
  6. Работа со временем в Python
  7. Распаковка элементов массива
  8. Форматирование строк в Python
  9. Метод join для объединения строк
  10. Преобразование текста в нижний регистр
  11. Codecademy в Telegram
  12. Работа с комплексными числами в Python
  13. Векторизация в Python с NumPy.
  14. Сравнение def и lambda в Python
  15. Преобразование чисел в Python
  16. Асинхронное выполнение задач в процессах
  17. Обработка ошибок ввода данных
  18. Глобальные переменные в Python
  19. Генератор чисел Фибоначчи
  20. Проверка файла .py на синтаксис.
  21. Решение переменной Шредингера
  22. Шаблоны Flask: условия и циклы
  23. Синтаксис переменных цикла в Python
  24. Переопределение метода
  25. Извлечение аудио из видео
  26. Руководство по Pymorphy2
  27. Модуль os в Python: работа с файлами
  28. Преобразование типов данных в set comprehension
  29. Метод rename() для переименования файлов и каталогов
  30. Управление импортом в Python
  31. Пространство имен в Python
  32. Возвращение нескольких значений
  33. Изменение списка срезами
  34. Декодирование байтов в строку
  35. Объединение, распаковка и деструктуризация
  36. Профилирование данных с Pandas
  37. Оптимизация гиперпараметров с Scikit Optimize
  38. Игра «Угадывание чисел»
  39. Объединение списков в строку
  40. Сериализация объектов в Python
  41. Работа с модулем bisect
  42. Итерация по итерируемым объектам
  43. Метод округления чисел
  44. f-строки в формате строк
  45. Управление контекстом с помощью декоратора contextmanager
  46. Цикл for в Python

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