元类单例不工作
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)一次。
谢谢大家:)
我最近尝试在我的项目中添加一个单例,但它并不像我想象的那样。 代码看起来有点像这样:
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)一次。
谢谢大家:)