反射就是根据提供的字符串,匹配对象(类、模块等)里面的方法。达到动态调用的目的。
主要有四个成员。getattr、hasattr、setattr、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()
以上就是常见用法了。
原文地址:http://blog.51cto.com/yishi/2072391
时间: 2024-11-12 16:18:16