从模块导入Python类,但不导入依赖项

时间:2012-04-26 09:22:20

标签: python python-module

如何导入python类但是避免在该模块中运行import语句?

Module foo
    from bar import A

Module bar
    import alpha

    class A(object):
        ...

    class B(objects):
        ...

我想导入A类但不需要B类。模块栏中的import语句是B类所必需的,但我想避免在可能的情况下安装该依赖项,因为(我假设)它将被加载到内存中但未使用。

任何帮助都将不胜感激。

2 个答案:

答案 0 :(得分:3)

您无法阻止bar导入alpha而不会在其来源中进行黑客攻击。但是你可以通过将alpha写入sys.modules来“伪造”>>> import alpha Traceback (most recent call last): File "<stdin>", line 1, in <module> ImportError: No module named alpha >>> import sys; sys.modules['alpha'] = object() >>> import alpha >>>

sys.modules

这是有效的,因为Python在alpha中缓存导入的模块,因此如果您导入两次,则不必第二次完成所有的艰苦工作。向它添加alpha意味着Python认为您已导入bar,因此当bar尝试执行此操作时,它将只返回缓存副本。

显然,你应该仔细考虑一下你是否愿意这样做 - alpha如果实际上在任何地方使用{{1}},会以意想不到的方式崩溃。

答案 1 :(得分:1)

将导入放在B类初始化

class B:
    def __init__:
        import alpha

如果我没弄错,这可能有效