Python:在多个模块中使用同一个类实例

2024-06-01 20:00:22 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个名为EventManager的类,并在每个模块中调用这个类。我想在主文件中创建一个EventManager实例,并在每个模块中使用该实例。我的问题是:

  • 对我来说这是正确的方法吗?请注意,我不想创建EventManager的多个实例,因为每次调用EventManager都会解析一个文件,而且该文件可能包含大量数据。在
  • 既然我想要更少的内存使用,那么最好的方法是什么?在

Tags: 模块文件数据实例方法内存eventmanager
1条回答
网友
1楼 · 发布于 2024-06-01 20:00:22

你可以用单身汉。下面是一个简单的例子:

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。在

相关问题 更多 >