元类单例不工作

Metaclass Singletons Not Working

我最近尝试在我的项目中添加一个单例,但它并不像我想象的那样。 代码看起来有点像这样:

main/main.py

class main(metaclass=Singleton):
    def __init__(self):
        ....
    def Action(self):
        self.helper=otherclasses.other.other()

if __name__ == "__main__":
    m = main()
    m.Action()

main/metaclasses/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)

main/otherclasses/other.py

class other():
     def __init__(self):
         ...
         self.main = Main.Instance()
         ...

因此,据我了解这个概念 - 我应该为子类获得相同的 Main 实例。然而我得到了一个全新的 Main 对象。 我很乐意提供帮助!我错过了什么?

提前致谢。

解决了。

我认为问题的原因是我通过“#pythonmain.py”运行程序。这样,因为 main.py 没有作为模块加载,当 other.py 调用 "import main",它被重新加载,因此 Main 重新初始化 Singleton.

"Run" 函数移动到另一个文件 ("# python Run.py" ) 并从那里导入 main.py,因此只按我的意愿初始化 Singleton(和 Main)一次。

谢谢大家:)