Python reload 对单例对象的影响
資深大佬 : towry 8
假如在 python 中使用了单例模式,维护了一个变量,那么在模块被 reload 后,这个变量会变吗?
大佬有話說 (2)
si_cls.py
“`
#!/bin/python
# coding: utf-8
ph = {‘ab’: 2}
# ph = 32
class SI:
def __new__(cls, *args, **kwargs):
return ph
def id(self):
return id(self)
si_instance = SI()
“`
test.py
“`
#!/bin/python
# coding: utf-8
import si_cls
from importlib import reload
s1 = si_cls.SI()
s2 = si_cls.SI()
print(f’id(s1)={id(s1)}, id(s2)={id(s2)}, id(si_instance)={id(si_cls.si_instance)}’)
reload(si_cls)
s1 = si_cls.SI()
s2 = si_cls.SI()
print(f’id(s1)={id(s1)}, id(s2)={id(s2)}, id(si_instance)={id(si_cls.si_instance)}’)
“`
当时写的可能比较乱,如果有没看懂的部分可以文章下发评论问。