给定两个模块,main 和 x,内容如下:
主要内容:
class Singleton(object):
_instance = None
def __new__(cls, *args, **kwargs):
if not cls._instance:
cls._instance = super(Singleton, cls).__new__(cls, *args, **kwargs)
cls._instance.x = 10
return cls._instance
uvw = Singleton()
if __name__ == "__main__":
print(id(uvw))
uvw.x += 10
print(uvw.x)
import x
和x,分别是:
import main
print(id(main.uvw))
print(main.uvw.x)
我现在希望在两个实例中执行 main 会产生相同的 ID 和值 20,但我得到的是:
$ python main.py
140592861777168
20
140592861207504
10
有什么方法可以确保 uvw
在两个地方都是同一个对象?
最佳答案
我认为问题在于您的 Singleton
类以某种方式被重新加载,因此在第二个模块中丢失了它的 _instance
字段。
我认为这会起作用:
单例.py
:
class Singleton(object):
_instance = None
def __new__(cls, *args, **kwargs):
if not cls._instance:
cls._instance = super(Singleton, cls).__new__(cls, *args, **kwargs)
cls._instance.x = 10
return cls._instance
a.py
:
from singleton import Singleton
uvw = Singleton()
print(id(uvw))
uvw.x += 10
print(uvw.x)
b.py
:
from singleton import Singleton
uvw = Singleton()
print(id(uvw))
uvw.x += 10
print(uvw.x)
main.py
import a
import b
关于python - 跨模块共享单例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13330974/