Встречается на собеседованиях • сегодня

Какие есть способы реализации паттерна Singleton

В Python есть несколько способов реализации Singleton:

  1. Через модуль (самый простой способ):
python
# singleton.py
class _Singleton:
    pass

instance = _Singleton()

При импорте instance всегда будет один и тот же объект.

  1. Через переопределение new:
python
class Singleton:
    _instance = None
    
    def __new__(cls):
        if cls._instance is None:
            cls._instance = super().__new__(cls)
        return cls._instance
  1. Декоратор:
python
def singleton(cls):
    instances = {}
    def wrapper(*args, **kwargs):
        if cls not in instances:
            instances[cls] = cls(*args, **kwargs)
        return instances[cls]
    return wrapper

@singleton
class MyClass:
    pass
  1. Метакласс:
python
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]

class Singleton(metaclass=SingletonMeta):
    pass

Выбор способа зависит от требований к инициализации и необходимости наследования.

Sophi
Софи собрала все вопросы. Тренируйся и получай
офферы быстрее!
Попробовать бесплатноArrow

Следующий вопрос

Это единственный вопрос по вашему фильтру

как отвечать на вопрос
пример собеседования
фреймворки на собеседовании
типичные вопросы junior
интервью вопросы и ответы