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

 

posted on 2022-06-14 15:09  礼哥宝典  阅读(704)  评论(0)    收藏  举报