python之反射机制
一、什么是反射
反射就是通过字符串的形式去对象(模块)中操作(查找/获取/删除/添加)成员,一种基于字符串的事件驱动
可使用反射的地方:
1、反射类中的变量 : 静态属性,类方法,静态方法 ---最为常用
下面三个不常用
2、反射对象中的变量、对象属性、普通方法
3、 反射模块中的变量
4、反射本文件中的变量
二、getattr()
获取类、对象等中的属性和方法
1 class Te(): 2 3 def abc(self): 4 print('abc你好') 5 return 'ok' 6 7 def de(self): 8 print("de不好") 9 #类的实例 10 b=Te() 11 #通过字符串abc去获取类Te()中的abc()方法,即通过字符串去获取类的方法 12 #返回值是该方法的内存地址 13 a=getattr(b,"abc") 14 #打印获取的方法地址 15 print(a) 16 #打印获取的方法执行的结果 17 print(a()) 18 """ 19 实际上上边的a就等于方法abc的内存地址,a()等于运营了abc方法 20 可以和下面的函数进行对比 21 """ 22 def abc(): 23 print('11') 24 return 'ko' 25 abc() 26 print(abc()) 27 28 打印的结果如下 29 <bound method Te.abc of <__main__.Te object at 0x7fa6c80b0470>> 30 abc你好 31 ok 32 11 33 11 34 ko
三、hasattr()
判断类、对象中是否有该方法和属性
class Te(): name='我是个属性' def abc(self): print('abc你好') return 'ok' def de(self): print("de不好") #类的实例 b=Te() #判断abc()方法是否在类Te()中存在,存在返回True,否则返回False a=hasattr(b,"abc") print(a) #判断那么属性是否在类Te()中存在,存在返回True,否则返回False c=hasattr(b,"name") print(c) d=hasattr(b,'age') print(d) 返回结果取下 True True False
四、setattr()
对该对象设置新的属性
class Te(): name='我是个属性' def abc(self): print('abc你好') return 'ok' def de(self): print("de不好") #类的实例 b=Te() #对b对象设置新的属性age,值为12 a=setattr(b,"age",12) print(b.age) 打印结果如下 12
五、delattr()
删除对象中的属性
class Te(): name='我是个属性' def abc(self): print('abc你好') return 'ok' def de(self): print("de不好") #类的实例 b=Te() #删除对象b中的name属性 delattr(Te,"name") c=hasattr(b,'name') print(c) 结果如下 False
浙公网安备 33010602011771号