Курс 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"
- Упрощение условных выражений с тернарным оператором
- Создание и удаление объектов
- Методы classmethod и staticmethod
- Управление ресурсами с контекстными менеджерами
- Метод rmatmul для обратного матричного умножения
- JMESPath в Python
- Оптимизация интернирования строк
- Перетасовка списков в Python
- Метод rrshift для пользовательских объектов
- Автоматизация действий с Pyautogui
- Переопределение метода delitem в Python
- Генераторы в Python
- Работа с argparse
- Список методов и атрибутов
- Инициализация переменных
- Команда %dhist — список посещенных каталогов
- Python Аргументы по умолчанию
- Блок else в циклах Python
- Объединение списков в Python
- Преобразование кортежа в словарь.
- Работа со строками
- Строки в Python: апострофы и кавычки
- Проверка типа объекта в Python
- Анонимные функции Lambda
- Операторы Splat и splatty-splat
- Оператор continue в Python
- Упрощение работы с JSON-данными в Python
- Создание именованных кортежей в Python
- Работа с URL-адресами в Python
- Подсчет количества элементов в списке
- Преобразование документов в PDF с помощью Spire.Office
- Генераторы в Python
- Лямбда-функции для min/max
- Операторы объединения в Python 3.9
- Генерация случайных данных в NumPy
- Документация функции help() в Python
- Логирование с Logzero
- Применение команды break
- Создание пользовательской коллекции в Python
- Именование переменных в Python
- Пропуск начальных строк с помощью dropwhile()
- Перевод эмодзи и эмотиконов.
- Расчет времени выполнения
- Метод __int__ в Python
- Создание словаря в Python
- Управление виртуальными окружениями в Python















