我有一个基础类,我想放在一些代码中。我只希望它被实例化或为给定的应用程序启动一次,尽管它可能被多次调用。下面代码的问题是LowClass一次又一次地启动。我只希望每次测试都能启动一次..
import logging
class LowClass:
active = False
def __init__(self):
self.log = logging.getLogger()
self.log.debug("Init %s" % self.__class__.__name__)
if self.active:
return
else:
self.active = True
self.log.debug("Now active!")
class A:
def __init__(self):
self.log = logging.getLogger()
self.log.debug("Init %s" % self.__class__.__name__)
self.lowclass = LowClass()
class B:
def __init__(self):
self.log = logging.getLogger()
self.log.debug("Init %s" % self.__class__.__name__)
self.lowclass = LowClass()
class C:
def __init__(self):
self.log = logging.getLogger()
self.log.debug("Init %s" % self.__class__.__name__)
self.a = A()
self.b = B()
class ATests(unittest.TestCase):
def setUp(self):
pass
def testOne(self):
a = A()
b = B()
def testTwo(self):
c = C()
感谢您指出我的问题!!
答案 0 :(得分:7)
答案 1 :(得分:2)
查找“单身模式”。它看起来像你正在处理的Python,所以你可能需要更加努力地搜索。我现在在C ++中有很多例子。
答案 2 :(得分:2)
您需要在python中实现Singleton设计模式
我发现这个implementation我希望它有所帮助
答案 3 :(得分:2)
在python中导入模块时,它是自然的单例。 例如, 在util.py中,你有:
class MyClass(object):
......
g_my_obj = MyClass()
在a.py中,导入g_my_obj:
from util import g_my_obj
在b.py中,您再次导入g_my_obj:
from util import g_my_obj
安全地,无论您导入多少次,都只创建了一个g_my_obj。
答案 4 :(得分:1)
我认为显示的代码问题是您设置了self.active=True
。这将为实例创建一个属性并将其设置为True
,而我相信您希望将类本身的活动设置为True
。因此,请尝试self.active=True
。
self.__class__.active=True