Курс 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"
- Обновление и получение данных в SQLite
- Управление ресурсами в Python
- Получение срезов итераторов
- Область видимости переменных
- Операции с матрицами в Python
- Сортировка данных с лямбда-функциями
- Использование html-скриптов в Jupyter Notebook
- Декораторы с @wraps
- Инициализация переменных
- Поиск самого длинного слова в списке с использованием max()
- Python Метод Union Множеств
- Генераторы в Python
- Взаимодействие с внешними процессами в Python
- Декоратор total_ordering для класса Point
- Работа с коллекциями Python
- Создание даты из строки ISO
- F-строки в Python
- Форматирование данных с помощью pprint
- Декоратор защиты анонимных пользователей
- Работа с индексами списков
- Модуль subprocess: запуск внешних команд
- Тернарный оператор в Python
- Перезагрузка оператора в Python
- Методы classmethod и staticmethod
- Работа с путями в Python
- Метод __ixor__ для побитового исключающего ИЛИ
- Аргумент по умолчанию
- Экспорт функций в Python
- Метод join() для объединения элементов строки
- Работа с URL-адресами в Python
- Сортировка HTML-элементов
- Создание задания в Cron
- Обработка данных в Python
- Метод __ilshift__ для битового сдвига влево
- Удаление дубликатов из списка с помощью dict.fromkeys
- Установка Python — Простое руководство
- Декораторы в Python
- Сортировка в Python
- Python reversed() функция
- Конкатенация строк в Python
- Функция all() в Python
- Регулярные выражения в Python
- Лямбда-функции в Python
- Конкатенация списков в Python
- Блок else в Python
- Нан-рефлексивность в Python
- Просмотр внешнего файла в Python















