考虑两个模块main和x,具体内容如下:
main:
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 和 y:
import main
print(id(main.uvw))
print(main.uvw.x)
我现在预期执行主函数会在两个实例中产生相同的ID和值为20,但我得到的是这样的结果:$ python main.py
140592861777168
20
140592861207504
10
有没有办法确保uvw
在两个地方是同一个对象?
__new__
方法的整个目的是为了防止您需要访问main.uvw
,因为Singleton()
每次都保证返回相同的实例。 - Ericmain
调用了x
,而x
又在调用main
...?这是一种混乱/灾难的做法。 - Andy Hayden__main__
和x
模块,它们是不同的命名空间。请查看重复项。 - Martijn Pieters