Bob's Blog

Web开发、测试框架、自动化平台、APP开发、机器学习等

返回上页首页

python根据路径动态加载文件中的方法或类



这里是一个用importlib根据路径来遍历并动态加载python文件中的方法或者类的例子。有什么文件是未知的,文件里有什么方法或类也是未知的,偶尔会用到来动态加载,不需要指定导入。

先创建一个目录和其中的两个文件吧。目录可以是如下简单例子,通过run.py加载first和second两个文件中的方法和类。为了方便,这里就把方法或类的doc获取到。

- check
  - first.py
  - run.py
  - test
    - __init__.py
    - second.py

其中first.py里是:

def debug_first():
    """
    this is debug first doc
    """
    return True

def verify_first():
    """
    this is verify first doc
    """
    return False

second.py里是:

class Calculator:
    """
    this is class doc
    """

    def __init__(self, a, b):
        self.a = a
        self.b = b

    def add(self):
        return self.a + self.b


def check_second():
    """
    this is check second doc
    """
    return True

在run.py的内容就是:

import importlib.util as iu
from pathlib import Path


if __name__ == "__main__":
    path = Path(__file__).absolute()
    for item in path.parent.glob("**/*"):
        if not item.is_dir():
            if item.name.endswith(".py") and item.name != path.name:
                print(item)
                spec = iu.spec_from_file_location("module.name", item)
                loader = iu.module_from_spec(spec)
                spec.loader.exec_module(loader)
                for method in dir(loader):
                    if method.startswith("__"):
                        continue
                    else:
                        doc = getattr(loader, method).__doc__
                        print(f"the doc of '{method}' is: {doc.strip()} \n")

最后的输出就是:

/check/first.py
the doc of 'debug_first' is : this is debug first doc
the doc of 'verify_first' is : this is verify first doc

/test/second.py
the doc of 'Calculator' is : this is class doc
the doc of 'check_second' is : this is check second doc

 

下一篇:  用curl检查网络请求的耗时
上一篇:  微信小程序开发(一)初探样例

共有0条评论

添加评论

暂无评论