【发布时间】:2013-07-30 20:09:41
【问题描述】:
背景:我正在使用设备供应商提供的 API 模块,该模块将设备登录数据(设备主机名、会话 ID 等)存储为全局变量;我试图弄清楚是否可以有多个模块实例来表示对多个设备的登录。
到目前为止,我已经用测试代码尝试了几种策略,但都没有奏效:
测试模块代码:statictest.py
count = 0
class Test():
@classmethod
def testcount(cls):
global count
count += 1
return count
第一次尝试:多次导入模块并实例化:
>>> import statictest as s1
>>> import statictest as s2
>>> s1.Test.testcount()
1
>>> s1.Test.testcount()
2
>>> s2.Test.testcount()
3
第二次尝试:在类中导入模块,实例化类:
#!/usr/bin/env python2.7
class TestMod():
s = __import__('statictest')
def test(self):
ts = self.s.Test()
return ts.testcount()
t = TestMod()
u = TestMod()
print t.test()
print u.test()
那个也不行:
[~/]$ ./moduletest.py
1
2
这似乎应该很明显,但是有没有办法封装一个模块以便多个实例可用?
【问题讨论】:
-
没有。如果你想要多个实例,你应该使用一个类,而不是一个模块级的值。通过将此状态置于模块级别,您的供应商行为(非常)糟糕。
-
请向您的供应商提交错误。这是被设计破坏的。
标签: python