Как получить ссылку на модуль, который реализован внутри этой реализации? - PullRequest
0 голосов
/ 05 августа 2009

Скажите, у меня есть следующий код:

 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.

Ответы [ 3 ]

2 голосов
/ 05 августа 2009

Будет ли это делать?

def iterate_over_all():
    for name in __all__:
        value = globals()[name]
        yield value # or do whatever with it
0 голосов
/ 05 августа 2009

Вы можете легко индексировать строки из __ all __ в модуль __ dict __ :

__dict__["Foo"] == foo.bar.Foo  # -> True
0 голосов
/ 05 августа 2009

eval в одну сторону. например eval("Foo") даст вам Foo. Однако вы также можете просто поместить Foo and Bar прямо в ваш список, например, __all__ = [Foo, Bar]

Это будет зависеть от того, откуда исходит содержание __all__ в вашей реальной программе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...