Курс 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"
- Обработка ошибок в Python
- Работа с рекламными данными в Pandas
- Форматирование строк с % в Python
- Проверка класса объекта
- Логирование с Logzero
- Создание таблиц в Python с PrettyTable
- Удаление дубликатов из списка с помощью dict.fromkeys
- Работа с файлами в Python
- Скачать видео с YouTube
- Генераторы данных
- Глобальные переменные в Python
- Удаление ресурса в Python
- Работа с множествами в Python
- Каналы Senior: Python, Java, Frontend, SQL, C++
- Сериализация и десериализация объектов
- Enum в Python
- Работа с файлами в Python
- Создание .exe файла с pyinstaller
- Анализ текста на русском языке с помощью Pymystem3
- Оптимизация сравнения в Python
- Итерация по коллекции в Python
- Функция с *args.
- Создание пустых функций и классов в Python
- Руководство по библиотеке pydantic
- Переопределение метода __floordiv__
- Сортировка данных в Python
- Абстракции словарей и множеств в Python
- Функция zip() в Python
- Инверсия списка и строки
- Хранение данных
- List Comprehension Tutorial
- Выражения-генераторы в Python
- Python Enum Weekday Usage
- Управление виртуальными окружениями в Python
- Методы сравнения множеств
- Операторы Splat и splatty-splat
- Справка по импортированным модулям
- Оператор «моржа» (Walrus Operator)
- Удаление символа из строки
- Замена атрибута в именованном кортеже
- Работа с файловой системой в Python
- Конвертация коллекций в Python.
- Гибкие функции Python
- Итераторы в Python
- Генератор списка с условием if
- Проверка типа объекта в Python
- Сериализация объектов в Python
- globals и locals















