我已经创建了一个singlton,这里是类描述。
所有短信.py你知道吗
from DB.models import ApiKey,ServiceProvider
from DB.messagenet import MessageNet
class SMSMgr( object ):
_instance = None
_allsp = []
def __init__(self):
pass
def __new__(cls, *args, **kwargs):
if not cls._instance :
cls._instance = super(SMSMgr, cls).__new__(
cls, *args, **kwargs)
return cls._instance
def loadsettings(self):
get_all_sp = ServiceProvider.objects.filter(status = False)
for obj in get_all_sp:
cla = obj.class_Name
a=globals()[str(obj.class_Name)](obj.userName,obj.password,obj.sendingurl)
self._allsp.append(a)
#print self._allsp
def reload(self):
self._allsp = []
get_all_sp = ServiceProvider.objects.filter(status = False)
for obj in get_all_sp:
cla = obj.class_Name
a=globals()[str(obj.class_Name)](obj.userName,obj.password,obj.sendingurl)
self._allsp.append(a)
def send(self):
print "+++++++++++++++++++== Global send "
if __name__ == "__main__":
b = SMSMgr()
b.loadsettings()
现在在同一目录的test.py
文件中,我尝试使用存储在_allsp
变量中的singleton对象。你知道吗
from SMShandler.allsms import SMSMgr
b = SMSMgr()
#b.loadsettings()
print b._allsp
正在打印空列表。但当我这样做的时候:
b = SMSMgr()
b.loadsettings()
print b._allsp
它正在打印对象列表。你知道吗
我的问题是,如果上面的设计是singlton,那么为什么print b._allsp
在test.py
中打印空列表?我已经在loadsettings
文件中加载了allsms.py
。你知道吗
您正在
loadsettings()
块中运行if __name__ == "__main__"
:这样一个块的目的是只在代码直接运行时发生(比如
python allsms.py
)。这意味着当它被导入到行中时不会发生:如果将行
b.loadsettings()
放在if
块之外,就会看到它已经被加载了。你知道吗相关问题 更多 >
编程相关推荐