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

如何从该实现中获取对模块的引用?

  •  0
  • jkp  · 技术社区  · 15 年前

    假设我有以下代码:

     from foo.bar import Foo
     from foo.foo import Bar
    
     __all__ = ["Foo", "Bar"]
    
     def iterate_over_all():
         ...
    

    如何在函数中实现代码 iterate_over_all() 可以动态获取对中引用的内容的引用 __all__ 实现功能的模块?II:在 在所有()上迭代 我想和你一起工作 foo.bar.Foo foo.foo.Bar .

    3 回复  |  直到 15 年前
        1
  •  2
  •   Martin Blech    15 年前

    这样行吗?

    def iterate_over_all():
        for name in __all__:
            value = globals()[name]
            yield value # or do whatever with it
    
        2
  •  0
  •   mikej heading_to_tahiti    15 年前

    eval 是一种方式。例如 eval("Foo") 会给你 Foo . 但是,您也可以直接将foo和bar放在列表中,例如 __all__ = [Foo, Bar]

    这取决于 __all__ 来自您的实际程序。

        3
  •  0
  •   ThomasH    15 年前

    您可以轻松地使用以下字符串进行索引: 阿尔法 进入模块 第二节 :

    __dict__["Foo"] == foo.bar.Foo  # -> True