python - 根据package名称在包里找到class
如果在只知道package名称的情况下,找到某个class,则可以用__import__来实现。代码如下:
def createInstance(module_name, class_name, *args, **kwargs): # rootmodule = __import__(module_name) # import名称为module_name的第一级的package. 例如module_name为level1.level2.level3,则 import leve1 rootmodule = __import__(module_name, globals(), locals(), [class_name]) # import名称为module_name的package. 例如module_name为level1.level2.level3,则 import level1.level2.level3 r = pkgutil.walk_packages(rootmodule.__path__, rootmodule.__name__ + ".") for modulename in r: module_meta = __import__(modulename.name, globals(), locals(), [class_name]) packagepath = getattr(module_meta, '__package__') try: class_meta = getattr(module_meta, class_name) obj = class_meta(*args, **kwargs) if obj is not None: return obj except: pass return None