你可以用单身汉。下面是一个简单的例子:def singleton(cls):
return cls()
@singleton
class EventManager:
def __init__(self):
self.events = []
def add_event(self, event):
self.events.append(event)
def print_events(self):
print("Events : {}".format(self.events))
EventManager.add_event(0)
EventManager.add_event(1)
EventManager.add_event(2)
EventManager.print_events()
输出:
^{pr2}$
请注意,当单例导入并在其他模块中使用时,一切仍按预期工作。在
编辑
你问:The thing is that I initialize the class with a variable like EventManager(var), what shall I do in this case?
类将在其定义后立即实例化,即第一次导入包含EventManager的模块。由于EventManager是一个单例,我不认为用变量初始化单例是没有意义的。即使有可能:def singleton_with_args(*args, **kwargs):
def wrapper(cls):
return cls(*args, **kwargs)
return wrapper
@singleton_with_args(0)
class EventManager:
def __init__(self, first_event):
self.events = [first_event]
def add_event(self, event):
self.events.append(event)
def print_events(self):
print("Events : {}".format(self.events))
EventManager.add_event(1)
EventManager.add_event(2)
EventManager.add_event(3)
EventManager.print_events()
输出:Events : [0, 1, 2, 3]
它很管用,但正如我所说,我觉得没用。您也可以使用方法或模块变量来初始化您的singleton。在