Курс 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: nonlocal
  2. Работа с путями в Python
  3. Оператор деления для класса Rational
  4. Класс-оболочка для словарей
  5. Конвертация коллекций в Python
  6. Поиск кода
  7. Разработка Telegram-ботов
  8. Аннотации типов в Python
  9. Оператор continue в Python
  10. Документация функции help() в Python
  11. Нахождение хеша для бесконечности и NaN в Python
  12. Ускоренный импорт библиотек
  13. Автоматизация действий с Pyautogui
  14. Сортировка слиянием
  15. Генерация строк с .join()
  16. Срезы в Python
  17. Отступы в Python
  18. Сортировка в Python
  19. Преобразование типов данных в set comprehension
  20. Нахождение самого длинного слова в списке с помощью max
  21. Мониторинг памяти с Pympler
  22. Установка виртуального окружения Python
  23. Отладка утечек памяти в Python
  24. Передача параметров в Python
  25. Метод сравнения объектов в Python
  26. Замена символов в Python
  27. Обработка исключений с блоком else
  28. Python Enumerate
  29. Разделение строки с регулярными выражениями
  30. Многоточие в Python
  31. Создание виртуальной среды
  32. Dict Comprehension в Python
  33. Именованные срезы в Python
  34. Регистрация на TenChat
  35. Метод eq для сравнения объектов
  36. Манипуляция формой массива в Numpy
  37. Python-dateutil — работа с датами
  38. Цикл for в Python
  39. Поиск всех индексов подстроки
  40. Работа с комплексными числами
  41. Объединение списков в строку
  42. Списки: объединение, изменение
  43. Кортежи в Python: особенности и преимущества
  44. Вычисление натуральных логарифмов в NumPy
  45. Удаление символа из строки
  46. Хеширование паролей с солью

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