Metaclass Singletons不工作

时间:2016-01-31 23:26:29

标签: python singleton metaclass

我最近尝试过为我的项目添加一个单例,但它并没有像我认为的那样行事。 代码看起来有点像这样:

主要/ 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实例。然而,我得到了一个全新的主要对象。 我很乐意得到一些帮助!我错过了什么?

提前致谢。

1 个答案:

答案 0 :(得分:0)

解决了它。

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

"运行" 功能移动到另一个文件("#python Run.py" )并导入main.py从那里开始,只按我的意愿只初始化 Singleton (和 Main )。

谢谢大家:)