你可以使用单身人士.这是一个简单的例子:
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()
输出:
Events : [0, 1, 2]
请注意,在导入单例并在其他模块中使用时,一切仍然按预期工作.
编辑
您询问 :
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