python中反射(__import__和getattr使用),,反射:1、可通过字符


反射:

1、可通过字符串的形式导入模块

  1.1、单层导入 

技术分享
1 __import__(‘模块名‘)
View Code

  1.2、多层导入

技术分享
1 __import__(‘ list.text.commons‘,fromlist=True) #如果不加上fromlist=True,只会导入list目录
View Code

2、可以通过字符串的形式执行模块的功能

技术分享
 1 import glob,os 2  3 modules = [] 4 for module_file in glob.glob("*-plugin.py"): 5     try: 6        module_name,ext = os.path.splitext(os.path.basename(module_file)) 7        module = __import__(module_name) 8        modules.append(module) 9     except ImportError:10        pass #ignore broken modules11     #say hello to all modules12     for module in modules:13        module.hello()
进行反射py代码技术分享
1 def getfunctionbyname(module_name,function_name):2     module = __import__(module_name)3     return getattr(module,function_name)
__import__导入的模块

3、反射即想到4个内置函数分别为:getattr、hasattr、setattr、delattr 获取成员、检查成员、设置成员、删除成员下面逐一介绍先看例子:

技术分享
 1 class Foo(object): 2   3     def __init__(self): 4         self.name = ‘abc‘ 5   6     def func(self): 7         return ‘ok‘ 8   9 obj = Foo()10 #获取成员11 ret = getattr(obj, ‘func‘)#获取的是个对象12 r = ret()13 print(r)14 #检查成员15 ret = hasattr(obj,‘func‘)#因为有func方法所以返回True16 print(ret)17 #设置成员18 print(obj.name) #设置之前为:abc19 ret = setattr(obj,‘name‘,19)20 print(obj.name) #设置之后为:1921 #删除成员22 print(obj.name) #abc23 delattr(obj,‘name‘)24 print(obj.name) #报错
View Code

python中反射(__import__和getattr使用)

相关内容

    暂无相关文章

评论关闭