Курс 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"
- Сохранение и загрузка модели в PyTorch
- Просмотр атрибутов и методов класса
- PrettyTable: создание таблицы
- Удаление элемента из списка
- Повторение элементов в Python
- Работа с временем в Python
- Область видимости переменных
- Оператор zip в Python
- Возведение в квадрат с помощью itertools
- Сравнение объектов в Python
- Метод join() для объединения элементов
- Вычисление логарифмов в Python
- Оптимизация памяти с __slots__
- Оптимизация параметров в Python
- Генерация случайных чисел в Python
- Округление чисел с помощью round
- Сортировка данных с лямбда-функциями
- Измерение времени выполнения с помощью time
- Переопределение метода sub
- Antigravity модуль
- Работа с изображениями Pillow
- Определение основы слова с showballstemmer
- Руководство по Pymorphy2
- Работа с timedelta
- Замена переменных в Python
- Установка и использование модуля «howdoi»
- Параллельные вычисления в Python
- Генераторы в Python
- Модуль xkcd: добавление юмора в Python
- Метод rxor для операции побитового исключающего «или»
- Обработка исключений в Python
- Цепные операции в Python
- Обмен данными с asyncio.Queue
- Избегайте изменяемых аргументов
- Философия Python
- Многострочные комментарии в Python
- Логирование в Python
- Переворот строки
- Декоратор total_ordering для сравнения объектов
- Работа с изменяемыми коллекциями
- Создание циклической ссылки
- Логирование с Logzero: ротация файла
- Хранение данных
- Подсказки типов в Python
- Метод getitem для доступа к элементам последовательности
- TypedDict для kwargs в Python 3.12
- Создание уникального множества















