_instance_ptr = None
def __init__(self, a: int):
if self._instance_ptr.__dict__:
return
self.a = a
def __new__(cls, *args, **kwargs):
if not cls._instance_ptr:
obj = super().__new__(cls)
cls._instance_ptr = obj
return obj
return cls._instance_ptr
singleton = Singleton(10)
singleton_two = Singleton(5)
print(singleton.a)
print(singleton_two is singleton)
output:
10
True
Мне нравится такая реализация: singleton = 5
Если нам понадобился синглтон, мы можем с тем же успехом просто использовать отдельно взятую глобальную переменную, а не делать вид, что у нас их нет.
я просто собираю паттерны в один репо, и хотел бы удостовериться что это норм реализация, not for production
Есть же уже такие
ну я захотел свой
1. не потокобезопасен 2. надеюсь ты в курсе, что синглтон - антипаттерн 3. синглтон с параметром - это что-то странное
2 да, 3 - не знаю, не работал с синглтоном, было бы интересно узнать, 1 - почему? как исправить?
ага, если хочешь потокобезопасность придется. Осталось понять, что лок тоже надо как-то получить
ну thread_lock - это что?
глобал threading.Lock()
отлично, так почему бы не сделать просто глобал вместо всего синглтона?
https://t.me/ru_python_beginners/2562171
Обсуждают сегодня