python_反射:动态导入模块
2024-10-06 09:11:16
官方推荐方法:
test_mod.py
def hi():
print('Hi')
test.py
import importlib q = importlib.import_module('test_mod') #动态导入模块
q.hi()
如果导入文件夹下面的模块引号内可以这样:目录.模块名
q = importlib.import_module('app.test_mod') #动态导入模块
调用的模块:lib文件夹下面的commons.py
def f1():
print('函数1') def f2():
print('函数2') def f3():
print('函数3')
反射:根据用户输入字符导入模块并调用模块中的方法
import os yhf = 'lib' def wdc():
inp = input('请输入(模块名/方法名):')
# 将输入的字符串根据‘/’分割,并分别赋值给m和f
try:
m,f = inp.split('/')
# 检测是要导入的模块是否存在
except Exception:
print('输入格式不正确!')
else:
if os.path.exists(yhf + '/' + m + '.py'): # 根据字符串导入模块,若导入文件夹下面的模块,需要后面添加fromlist=True
obj = __import__(yhf + '.' + m, fromlist=True)
# 检测模块中是否存在成员(模块,成员名),返回 T/F
if hasattr(obj, f):
# 根据字符串的形式去对象(模块)中寻找成员。返回成员名
func = getattr(obj, f) # (模块,用户输入的字符串)
# 执行方法
func()
else:
# 当方法名输入错误时
print('没有找到该方法!')
else:
print('不存在此模块!') wdc()
执行结果:
四个方法:
delattr() 根据字符串删除方法
setattr() 根据字符串创建方法
hasattr() 根据字符串检测方法是否存在
getattr() 根据字符串寻找方法
最新文章
- 第一次打开Lightroom时的基本设置
- 深入解析direct path read (转)
- Spring+C3P0数据库连接池配置
- android操作文件
- Eclipse中设置在创建新类时自动生成注释
- Paxos算法 Paxos Made Simple
- POJ 1698 (二分图的多重匹配)
- Java_并发线程_CompletionService
- swift -- 构造/析构函数
- 1133: 零起点学算法40——多组测试数据(a+b)II
- C++基本知识点总结(网摘)
- Jquery Mobile笔记之一
- Populate screen data automatically
- Spring Boot – 自定义PropertyEditor
- 通过 Systemd Journal 收集日志
- java中的key事件监听机制
- 2018.09.11 bzoj47214721: [Noip2016]蚯蚓(单调队列)
- phpredis -- redis_cluster
- 【2016NOIP十连测】【test4】【状压DP】【容斥原理】巨神兵
- Yarn NodeManager restart