2010-02-01 66 views

回答

4

这似乎是你想要什么:

def import_path(name): 
    modname, _, attr = name.rpartition('.') 
    if not modname: 
     # name was just a single module name 
     return __import__(attr) 
    m = __import__(modname, fromlist=[attr]) 
    return getattr(m, attr) 

为了使其与Python 2.5和更早,其中__import__不采取关键字参数,你需要使用:

m = __import__(modname, {}, globals(), [attr]) 
+0

完成,感谢您的注意。 – 2011-03-13 06:38:04

0

尝试

def import_path(name): 
    (mod,mem) = name.rsplit('.',1) 
    m = __import__(mod, fromlist=[mem]) 
    return getattr(m, mem) 

作品至少

>>> import_path('os.walk') 
<function walk at 0x7f23c24f8848> 

现在

>>> import_path('os.path.join') 
<function join at 0x7f7fc7728a28> 
+0

试试吧为'os.path.join'并让我知道它是否工作。 :-) – 2010-02-01 19:07:16

+0

呃,__import__语义是愚蠢的 – 2010-02-01 19:31:32

+0

@sridhar幸运的是,它很容易解决,请参阅我的最新编辑 – 2010-02-01 21:16:25

0

显然以下工作:

>>> p = 'os.path.join' 
>>> a, b = p.rsplit('.', 1) 
>>> getattr(__import__(a, fromlist=True), b) 
<function join at 0x7f8799865230> 
+0

我是不是滥用'fromlist'参数? – 2010-02-01 19:09:43

+0

是的,你是:) – 2010-02-01 19:13:07

相关问题