反射
说反射之前先介绍一下__import__方法,这个和import导入模块的另一种方式
import commons __import__('commons')
如果是多层导入:
from list.text import commons __import__(' list.text.commons',fromlist=True) #如果不加上fromlist=True,只会导入list目录
反射即想到4个内置函数分别为:getattr、hasattr、setattr、delattr 获取成员、检查成员、设置成员、删除成员
下面逐一介绍
1 #coding:UTF8 2 3 4 class Foo(object): 5 6 def __init__(self): 7 self.name = 'abc' 8 9 def func(self): 10 return 'ok' 11 12 obj = Foo() 13 #获取成员 14 ret = getattr(obj, 'func')#获取的是个对象 15 r = ret() 16 print(r) 17 #检查成员 18 ret = hasattr(obj,'func')#因为有func方法所以返回True 19 print(ret) 20 #设置成员 21 print(obj.name) #设置之前为:abc 22 ret = setattr(obj,'name',19) 23 print(obj.name) #设置之后为:19 24 #删除成员 25 print(obj.name) #abc 26 delattr(obj,'name') 27 print(obj.name) #报错
1 运行结果: 2 ok 3 True 4 abc 5 19 6 19 7 Traceback (most recent call last): 8 File "E:demo.py", line 27, in <module> 9 print(obj.name) #报错 10 AttributeError: 'Foo' object has no attribute 'name'
对于反射小节:
1.根据字符串的形式导入模块。
2.根据字符串的形式去对象(某个模块)中操作其成员