LINUX.ORG.RU

Функция __import__ в Python


0

0

Взял в справке следующий пример:

def my_import(name):
    mod = __import__(name)
    components = string.split(name,'.')
    for comp in components[1:]:
        mod = getattr(mod, comp)
    return mod   

Не нравится, что при вызове надо писать:

re = my_import("re")

Вопрос: как сделать, чтобы автоматически создавалась одноименная
глобальная переменная типа модуль (если я правильно полнял процесс испорта модуля): 

# для функции my_import
global name
name = mod

так?

def my_import(name):
    mod = __import__(name)
    components = name.split('.')
    for comp in components[1:]:
        mod = getattr(mod, comp)
    globals()[name] = mod

правда, с таким разбиением пути получается кака:

>>> my_import("os.path")
>>> globals()
{'a': {...}, 'my_import': <function my_import at 0xb7bcb02c>, 'string': <module 'string' from '/usr/lib/python2.4/string.pyc'>, '__builtins__': <module '__builtin__' (built-in)>, 
're': <module 're' from '/usr/lib/python2.4/re.pyc'>, 'x': 1, '__name__': '__main__', '__doc__': None, 'os.path': <module 'posixpath' from '/usr/lib/python2.4/posixpath.pyc'>}

'os.path' недоступен через os.path

smartly ★★★
()
Ответ на: комментарий от smartly

> globals()[name] = mod

Тогда уж:

globals()[ components[0] ] = mod

Однако, рекомендую посмотреть, что получится, если my_import определена в одном модуле, а вызывается в другом.

watashiwa_daredeska ★★★★
()
Ответ на: комментарий от watashiwa_daredeska

>Однако, рекомендую посмотреть, что получится, если my_import определена в одном модуле, а вызывается в другом.

Ну, я написал первое, что в голову пришло. Главное принцип показать, куда копать.

smartly ★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.