我最近尝试过为我的项目添加一个单例,但它并没有像我认为的那样行事。 代码看起来有点像这样:
主要/ main.py
class main(metaclass=Singleton):
def __init__(self):
....
def Action(self):
self.helper=otherclasses.other.other()
if __name__ == "__main__":
m = main()
m.Action()
主要/元类/ singleton.py
class Singleton(type):
_instance = None
def __init__(cls, name, bases, dict):
super(Singleton, cls).__init__(name, bases, dict)
def __call__(cls, *args, **kwargs):
if cls._instance is None:
cls._instance = super(Singleton, cls).__call__(*args, **kwargs)
return cls._instance
def Instance(cls, *args, **kwargs):
return cls.__call__(*args, **kwargs)
主要/ otherclasses / other.py
class other():
def __init__(self):
...
self.main = Main.Instance()
...
所以,据我所知这个概念 - 我应该为子类获得相同的Main实例。然而,我得到了一个全新的主要对象。 我很乐意得到一些帮助!我错过了什么?
提前致谢。
答案 0 :(得分:0)
解决了它。
我认为问题的原因是我通过"#python main.py"运行程序。这样,因为 main.py 没有作为模块加载,当 other.py 名为" import main" ,它被重新加载,因此 Main 重新初始化 Singleton 。
将"运行" 功能移动到另一个文件("#python Run.py" )并导入main.py从那里开始,只按我的意愿只初始化 Singleton (和 Main )。
谢谢大家:)