Python:对象在不同的fi上不可用

2024-04-26 22:19:34 发布

您现在位置:Python中文网/ 问答频道 /正文

我已经创建了一个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._allsptest.py中打印空列表?我已经在loadsettings文件中加载了allsms.py。你知道吗


Tags: instancenamepyselfobjgetdefall
1条回答
网友
1楼 · 发布于 2024-04-26 22:19:34

您正在loadsettings()块中运行if __name__ == "__main__"

if __name__ == "__main__":
    b = SMSMgr()
    b.loadsettings()

这样一个块的目的是只在代码直接运行时发生(比如python allsms.py)。这意味着当它被导入到行中时不会发生:

from SMShandler.allsms import SMSMgr

如果将行b.loadsettings()放在if块之外,就会看到它已经被加载了。你知道吗

相关问题 更多 >