Курс 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"
- Вакансии в Nebius
- Исправление ошибки NameError
- Избегание циклических зависимостей классов в Python
- Проверка кортежей.
- Искажение имен в Python
- Функция zip() в Python
- Библиотека sh: удобные команды терминала
- Проверка вхождения подстроки
- Numpy: разбиение массивов
- Разделение строки в Python
- Декораторы с @wraps
- Операции с числами в Python
- Поиск анаграмм с Counter
- Условные выражения в Python
- Любовь к Python
- Перезапуск ячейки в Jupyter Notebook с dostoevsky
- Метод matmul для умножения матриц
- Преобразование символов с помощью map
- Импорт классов из другого файла
- Деление в Python
- Удаление дубликатов из списка с помощью dict.fromkeys
- Тернарный оператор в Python
- Проверка файла .py на синтаксис.
- Чтение бинарного файла в Python.
- Отношения подклассов в Python
- Протокол управления контекстом
- Хранение данных
- Применение функции к элементам списка
- Форматирование строк в Python
- Метод rename() для переименования файлов и каталогов
- Оператор (*) в Python
- Сравнение строк в Python
- Функциональное программирование.
- Функция map() и ленивая оценка
- Установка и использование Logzero
- Работа с срезами в Python
- Ввод нескольких значений
- Принципы программирования
- Работа с итераторами через срезы
- Динамическая типизация в Python
- Defaultdict в Python
- Ускорение кода с помощью векторизации
- Определение относительного пути
- Показ всплывающих окон Tkinter
- Расчет времени выполнения















