发布时间:2019-07-15 11:00:30编辑:auto阅读(1257)
反射就是根据提供的字符串,匹配对象(类、模块等)里面的方法。达到动态调用的目的。
主要有四个成员。getattr、hasattr、setattr、delattr 获取成员、检查成员、设置成员、删除成员
语法:
getattr(对象,字符串)
setattr(对象,字符串,val)
hasattr(对象,字符串)
delattr(对象,字符串)
'''一个简单的例子''' # 定义一个symbol类,有a,b,c三个方法。 class Symbol(object): def a(): pass def b(): pass def c(): pass # 输入方法名,执行对应方法。 S = Symbol() method = input('input method name:').strip() if hasattr(Symbol,method): # 判断是否存在输入的方法名 getattr(Symbol,method) # 如果存在则运行方法 else: print("Error!Not Found!")
下面是使用__import__导入模块的例子:
相同目录导入
import commons
__import__('commons')
多层目录导入
from list.text import commons
__import__(' list.text.commons',fromlist=True) #如果不加上fromlist=True,只会导入list目录
而在使用的时候也可以动态输入模块名!
def main(): imp = input('input model name:') # 输入模块名 med = input('input method name:') # 输入方法名 print(imp ,med ) try: obj = __import__(imp ) #导入该模块 print(obj) if hasattr(obj,med): #判断有没有这个方法 fuc = getattr(obj,med) #获得这个方法 fuc() else: print('Error not found method!') except: print('Error not found model!') if __name__ == '__main__': main()
官方建议使用标准库importlib
import importlib lib = importlib.import_moudle("lib\func") #lib\func是模块路径
上一篇: python日志解析
下一篇: 目前最全的python的就业方向
47484
45786
36784
34317
28955
25589
24436
19606
19102
17627
5458°
6041°
5563°
5632°
6565°
5370°
5370°
5878°
5851°
7163°