代码之家  ›  专栏  ›  技术社区  ›  Barthelemy

是否可以从python中重载/导入?

  •  8
  • Barthelemy  · 技术社区  · 15 年前

    是否可以在python中重载from/import语句?

    例如,假设 jvm_object 是类的实例 JVM ,是否可以编写此代码:

    class JVM(object):
    
      def import_func(self, cls):
        return something...
    
    jvm = JVM()
    
    # would invoke JVM.import_func
    from jvm import Foo
    
    2 回复  |  直到 15 年前
        1
  •  7
  •   aaronasterling    15 年前

    This post 演示如何使用中介绍的功能 PEP-302 通过Web导入模块。我将它作为如何自定义import语句的示例发布,而不是作为建议的用法发布;)

        2
  •  3
  •   tux21b    15 年前

    很难找到在动态语言(如python)中不可能找到的东西,但我们真的需要滥用一切吗?不管怎样,这里是:

    from types import ModuleType
    import sys
    
    class JVM(ModuleType):
        Foo = 3
    
    sys.modules['JVM'] = JVM
    
    from JVM import Foo
    print Foo
    

    但我在几个库/项目中看到的一种模式是 _make_module() 函数,它创建一个 ModuleType 动态并初始化其中的所有内容。之后,当前模块将替换为新模块(使用分配给 sys.modules ) MayMax模块() 函数被删除。这样做的好处是,您可以在模块上循环,甚至可以在循环内向模块添加对象,这有时非常有用(但要小心使用!).