从模块而不是依赖项导入Python类
如何导入python类,但避免在该模块中运行import语句从模块而不是依赖项导入Python类,python,python-module,Python,Python Module,如何导入python类,但避免在该模块中运行import语句 Module foo from bar import A Module bar import alpha class A(object): ... class B(objects): ... 我想导入类A,但不需要类B。类B需要模块栏中的import语句,但如果可能的话,我希望避免安装该依赖项,因为我假设它将加载到内存中,但不会使用 如果您有任何帮助,我们将不胜感
Module foo
from bar import A
Module bar
import alpha
class A(object):
...
class B(objects):
...
我想导入类A,但不需要类B。类B需要模块栏中的import语句,但如果可能的话,我希望避免安装该依赖项,因为我假设它将加载到内存中,但不会使用
如果您有任何帮助,我们将不胜感激。您无法阻止bar导入alpha,而不必对其源代码进行黑客攻击。但您可以通过将alpha写入sys.modules来伪造它:
这是因为Python将导入的模块缓存在sys.modules中,因此,如果您两次导入某个模块,就不必在第二次完成所有的繁重工作。向其中添加alpha意味着Python认为您已经导入了alpha,所以当bar尝试导入alpha时,它只会返回缓存副本
显然,您应该仔细考虑是否适合这样做—如果bar在任何地方实际使用alpha,它将以意外的方式崩溃。如果不在源代码中进行黑客攻击,您无法阻止bar导入alpha。但您可以通过将alpha写入sys.modules来伪造它:
这是因为Python将导入的模块缓存在sys.modules中,因此,如果您两次导入某个模块,就不必在第二次完成所有的繁重工作。向其中添加alpha意味着Python认为您已经导入了alpha,所以当bar尝试导入alpha时,它只会返回缓存副本
显然,您应该仔细考虑是否适合这样做—如果在任何地方使用alpha,bar将以意外的方式崩溃。将导入放在B类init中
class B:
def __init__:
import alpha
如果我没有弄错,这可能会起作用将导入放在B类init中
class B:
def __init__:
import alpha
如果我没有弄错的话,这可能会起作用如果alpha在B方法中使用,或者提供用于B或B方法的修饰符,那么这可能不会起作用。事实上,这将把alpha的范围限定在uu init_uu_u_uu_uu内,因此它不能在其他任何地方引用。如果alpha在B方法中使用,或者提供用于B或B方法的修饰符,则不会起作用。事实上,这将把alpha的作用域限定在_init___内,因此它不能在其他任何地方引用。谢谢-我试图使用sys.modules,但没有意识到我必须执行一个import@alan一个好的经验法则是,您需要定义每个变量。例如,sys没有任何意义,除非您告诉Python我希望sys表示stdlib中的模块,这是您使用import sys所做的。谢谢-我试图使用sys.modules,但没有意识到我必须执行一个命令import@alan一个好的经验法则是,您需要定义每个变量。例如,sys没有任何意义,除非您告诉Python我希望sys表示stdlib中的模块,这是您使用import sys所做的。