给定一个字符串形式为'package.module.Class'
,Python中是否有任何简单的方法可以直接获取类对象(假设模块尚未导入)?
如果没有,那么将'package.module'
部分与'Class'
部分__import__()
模块分开,然后从中获取类的最简洁方法是什么?
答案 0 :(得分:3)
import sys
def str_to_obj(astr):
'''
str_to_obj('scipy.stats.stats') returns the associated module
str_to_obj('scipy.stats.stats.chisquare') returns the associated function
'''
# print('processing %s'%astr)
try:
return globals()[astr]
except KeyError:
try:
__import__(astr)
mod=sys.modules[astr]
return mod
except ImportError:
module,_,basename=astr.rpartition('.')
if module:
mod=str_to_obj(module)
return getattr(mod,basename)
else:
raise
答案 1 :(得分:3)
尝试这样的事情:
def import_obj(path):
path_parts = path.split(".")
obj = __import__(".".join(path_parts[:-1]))
path_remainder = list(reversed(path_parts[1:]))
while path_remainder:
obj = getattr(obj, path_remainder.pop())
return obj
这适用于模块中getattr
'的任何内容,例如模块级函数,常量等。