猴子在导入时修补模块

时间:2014-01-15 20:12:37

标签: python import monkeypatching

我有一个像这样的包结构

mypackage
 |-- core.py
 |-- device.py
 |-- async.py
 |-- ...

core.py定义了一个Command类,用于处理与设备的通信。 通信是同步的(阻塞)。

#core.py
class Command(object):
    #...

设备模块定义了一个设备类,它使用Command类为真实设备提供API,例如:示波器。

# device.py
class MyDevice(object):
    cmd1 = Command(...)
    cmd2 = Command(...)

异步模块定义了Command的异步版本。

# async.py
class Command(object):
    # asyncronous command implementation

现在我想要的是以下内容:

# Note: There is no real /mypackage/async/device.py file
import mypackage.async.device
dev = mypackage.async.device.MyDevice(...) # uses asyncronous Command implementation

有许多类,如MyDevice。我不想仅仅为了切换Command实现来重写它们中的每一个。这就是为什么我认为修补工作会很好。但它也应该是明确的(不同的导入,用户不应该知道修补已经完成)。

我有什么建议可以实现这个目标吗?

0 个答案:

没有答案