如何导入python类但是避免在该模块中运行import语句?
Module foo
from bar import A
Module bar
import alpha
class A(object):
...
class B(objects):
...
我想导入A类但不需要B类。模块栏中的import语句是B类所必需的,但我想避免在可能的情况下安装该依赖项,因为(我假设)它将被加载到内存中但未使用。
任何帮助都将不胜感激。
答案 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
如果我没弄错,这可能有效