从模块而不是依赖项导入Python类

从模块而不是依赖项导入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语句,但如果可能的话,我希望避免安装该依赖项,因为我假设它将加载到内存中,但不会使用 如果您有任何帮助,我们将不胜感

如何导入python类,但避免在该模块中运行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所做的。