如何在该实现中实现对模块的引用?

时间:2009-08-05 07:19:25

标签: python module

说我有以下代码:

 from foo.bar import Foo
 from foo.foo import Bar

 __all__ = ["Foo", "Bar"]

 def iterate_over_all():
     ...

如何在函数iterate_over_all()中实现代码,该代码可以动态获取对实现函数的模块__all__中引用的内容的引用? IE:在iterate_over_all()我希望使用foo.bar.Foofoo.foo.Bar

3 个答案:

答案 0 :(得分:2)

这会吗?

def iterate_over_all():
    for name in __all__:
        value = globals()[name]
        yield value # or do whatever with it

答案 1 :(得分:0)

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

这取决于__all__的内容来自您实际计划的内容。

答案 2 :(得分:0)

您可以轻松地将 __ all __ 中的字符串索引到模块的 __ dict __ 中:

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