gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-30 02:11:46 24 4
gpt4 key购买 nike

我有一个名为 EventManager 的类,我在每个模块中调用这个类。我想在主文件中创建 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]

请注意,当导入单例并在其他模块中使用时,一切仍按预期工作。


编辑

你问:

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]

它有效,但正如我所说,我认为它没有用。您也可以使用方法或模块变量来初始化您的单例。

关于Python:在多个模块中使用相同的类实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20372669/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com