![](/img/trans.png)
[英]How to replace this statement “ StringIO import StringIO ” ( avaialbe in python 2 ) in python 3
[英]Python : Object is not avaialbe on different file
我创建了一个singlton,这是课程描述。
allsms.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
变量中的单例对象。
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
打印空列表? 我已经在allsms.py
文件中加载loadsettings
了。
您正在if __name__ == "__main__"
块中运行loadsettings()
:
if __name__ == "__main__":
b = SMSMgr()
b.loadsettings()
仅当直接运行代码(例如python allsms.py
)时,才会发生这种阻塞。 这意味着将其导入行中时不会发生:
from SMShandler.allsms import SMSMgr
如果将b.loadsettings()
行b.loadsettings()
if
块之外,则会看到它已经被加载。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.