说我有以下代码:
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.Foo
和foo.foo.Bar
。
答案 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