繁体   English   中英

Python:对象在其他文件上不可用

[英]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._allsptest.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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM