Python 联锁(仅启用同一类型的一个对象)

Python 联锁(仅启用同一类型的一个对象),python,python-2.7,Python,Python 2.7,这是我的任务: 我需要实例化同一类的一些对象。但只有一个对象可以处于活动状态,可能同时访问硬件。因此,我需要在类中包含一些联锁。我尝试了如下示例所示的方法 class ModuleClass(object): _activeModule = None def __init__(self, aModuleName): self.ModuleName = aModuleName def activate_module(self): if s

这是我的任务: 我需要实例化同一类的一些对象。但只有一个对象可以处于活动状态,可能同时访问硬件。因此,我需要在类中包含一些联锁。我尝试了如下示例所示的方法

class ModuleClass(object):

    _activeModule = None

    def __init__(self, aModuleName):
        self.ModuleName = aModuleName
    def activate_module(self):
        if self.__class__._activeModule == None:
            self.__class__._activeModule = self.ModuleName
            #activate module here
            print("%s active"%self.ModuleName)
        else:
            raise UserWarning, "other module active"
    def deactivate_module(self):
        if self.__class__._activeModule == self.ModuleName:
            self.__class__._activeModule = None
            #deactivate module here
            print("%s deactivated"%self.ModuleName)
        else:
            raise UserWarning
此类在测试运行开始时导入,此类的实例在测试运行中使用。现在的问题是,测试运行在任何情况下都可能中止。然后自动重复测试运行。然后我不能激活ModuleClass的任何对象,因为属性_activeModule没有设置为它的默认值

如果重复测试运行,如何实现该联锁也能正确运行?
我不想通过尝试来实现这一点。。。除了在测试运行中。是否可以在类或对象中对此进行管理?

将激活/停用写为:

并在测试代码中这样使用它:

module = ModuleClass("abc")
with module:
    print "using %s" % module.name
输出:

abc active
using abc
abc deactivated

即使在with块中引发异常,该模块也将始终处于停用状态。

可能合适。有几种方法可以在Python中实现一个,但我认为这行不通。目前,我们的框架初始化在测试运行开始时定义的每个模块。在测试运行期间,单个模块再次被激活和停用。这种方法很有趣,我已经尝试过了。但是,如果没有with语句,这是否也有效?我们使用的框架使用try-except结构。带有语句的上下文管理器是实现try`finally`的等效方法,但封装在获取和发布的对象中。这两个概念和try都是python语言本身的一部分。如果您的框架使用try`除了其他地方,这将不会真正与这里发生的事情交互。
abc active
using abc
abc deactivated