python根据路径动态加载文件中的方法或类
2021年8月31日 - 由Bo 0 评论 1085 阅读
这里是一个用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检查网络请求的耗时
上一篇:
微信小程序开发(一)初探样例