Релизовал 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()
Комментариев нет:
Отправить комментарий