Паттерн Одиночка - порождающий
При паттерне одиночка (singleton) объект класса может быть создан лишь единожды, а далее класс просто игнорирует создание, вместо этого выдавая тот же самый объект (который был создан самый первый).
Существуют разные варианты реализации данного паттерна.
Здесь представлен самый популярный в Python - через декоратор (также через базовый класс, через метакласс).
Tip
Допустим, у нас может быть лишь один писатель.
При попытке создать второго ничего не получится,
нам просто вернет того же самого первого писателя.
def singleton(cls):
instances = {}
def getinstance(*args, **kwargs):
if cls not in instances:
instances[cls] = cls(*args, **kwargs)
return instances[cls]
return getinstance
@singleton
class Writer:
def __init__(self, name):
self.name = name
def __str__(self):
return self.name
writer1 = Writer("писатель1")
writer2 = Writer("писатель2")
print(writer1, writer2)
# output:
# писатель1 писатель1