python中的依赖注入(取决于模块可用性)

时间:2013-03-06 23:43:45

标签: python python-2.7

我正在研究GPS IDE的插件,我希望有两个版本: 1. GPS插件 - 使用GPS运行 2.独立应用 - 无GPS运行

插件的一个功能是线条突出显示。当插件作为独立应用程序运行时,这是不可能的。我创建了gpshelper类,它导入了GPS模块。当作为独立应用程序运行时,导入会抛出ImportException(因为GPS模块不可用)。 我想知道如何将这个gpshelper模块注入我的插件。

在高亮方法调用期间执行突出显示(此方法调用gpshelper)。

没关系,在内部突出显示方法中我这样做:

try:
    import gpshelper
except ImportError:
    warnings.warn('Program is running as python app (not GPS plugin)')

也许还有其他/更好的方法可以做到这一点?

1 个答案:

答案 0 :(得分:2)

定义gps_highlight例程作为导入gpshelper的try部分的一部分。然后从现有代码中调用该例程。在except部分中定义一个虚拟gps_highlight函数。这样你就可以保持调用代码的清洁:

import warnings

try:
    import gpshelper
    def gps_highlight(*args, **kw):
        return gpshelper.highlight(*args, **kw)
except ImportError:
    warnings.warn('Program is running as python app (not GPS plugin)')
    def gps_highlight(*args, **kw):
        return None

# after this you can safely call gps_highlight with the right parameters
# as needed by gpshelper.highlight