Страницы

Поиск по вопросам

понедельник, 4 февраля 2019 г.

singleton на python

Релизовал singleton с Wiki(ссылка на вики)
Мой код:
class SpriteManager(object):
def __new__(cls): if not hasattr(cls, 'instance'): cls.instance = super(SpriteManager, cls).__new__(cls) return cls.instance
def __init__(self):
self.setSprite = set()
Каждый раз при вызове SpriteManager() вызывается конструктур. Согласно концепции singleton, инициализация должна проходить один раз при первом вызове. Как сделать,что бы конструктор вызывался один раз?


Ответ

Могу предложить такой вариант:
class SpriteManager(object): __instance = None
@staticmethod def inst(): if SpriteManager.__instance == None: SpriteManager.__instance = SpriteManager() return SpriteManager.__instance
#single call check def __init__(self): print("Constructor called!")
a = SpriteManager.inst() b = SpriteManager.inst() print(a is b)
По выводу видим, что конструктор вызывается только один раз:
Constructor called! True
Доступ к синглтону осуществляем через функцию inst(), например так:
SpriteManager.inst().update()

Комментариев нет:

Отправить комментарий