Avatar ·

singleton на python

📁 python, ии

Релизовал singleton с Wiki()

Мой код:

class SpriteManager(object):    def __new__(cls):        if not hasattr(cls, 'instance'):             cls.instance = super(SpriteManager, cls).__new__(cls)        retu cls.instance    def __init__(self):        self.setSprite = set()

Каждый раз при вызове SpriteManager() вызывается конструктур. Согласно концепции singleton, инициализация должна проходить один раз при первом вызове. Как сделать,что бы конструктор вызывался один раз?

Avatar ·

Могу предложить такой вариант:

class SpriteManager(object):    __instance = None    @staticmethod    def inst():        if SpriteManager.__instance == None:            SpriteManager.__instance = SpriteManager()        retu 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()

Войдите чтобы оставить ответ

Блоги