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

 

posted @ 2023-09-14 17:40  panda4671  阅读(36)  评论(0编辑  收藏  举报