我有一个名为EventManager的类,我在每个模块中调用这个类。我想到在主文件中创建一个EventManager的实例,并在每个模块中使用该实例。我的问题是:
你可以使用单身人士。这是一个简单的例子:
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]
请注意,在导入单例并在其他模块中使用时,一切仍然按预期工作。
编辑
您询问 :
问题是我使用像EventManager(var)这样的变量初始化类,在这种情况下我该怎么做?
该类将在其定义后立即实例化,即第一次导入包含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]
它有效,但正如我所说,我不认为它有用。您也可以使用方法或模块变量来初始化您的单例。