python的对象反射功能,经常在编程时使用.相比较其它的编程语言使用非常方便.反射就是用字符串来操作对象或者类,模块中的成员.

python对象反射和函数反射

一.对象的反射

反射功能的实现,由这4个内置函数来实现(hasattr, getattr, setattr, delattr)

1.1.hasattr判断是否有某个成员

判断对象中是否有属性, 方法.返回bool值

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#!/usr/bin/env python
# -*-coding:utf-8-*-
 
:
 
:
name
 
:
 
)
#判断是否有name字段,返回True
#判断是否有f方法,返回True
#没有这个方法,返回False
#判断有没有静态字段,返回True
#使用类作为参数来判断
)
)

上例中使用对象作为obj参数来判断,是否有类的静态方法.也是可以的.因为对象的特殊性,先在对象中找是否有该成员,如果没在,通过对象指针,在去创建这个对象的类中找查

执行结果

1
2
3
4
5
6
7
True
True
False
True
True
]
]

 

 1.2.获取对象的成员

也可以使用对象来获取类的成员.和上例中的hasattr一样

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#!/usr/bin/env python
# -*-coding:utf-8-*-
 
:
 
:
name
 
:
.name
)
#获取对象的name字段
#通过对象获取类的方法
#打印出来是信类的方法
#加上括号就能直接调用执行这个的方法
)
#使用对象也能找到静态字段

 

1.3.增加对象或者类的成员

动态的增加对象或者类中的成员

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#!/usr/bin/env python
# -*-coding:utf-8-*-
 
:
 
:
name
 
:
.name
 
 
)
#增加普通字段
#增加普通方法
#增加静态字段
.age
.tel
)

执行结果

1
2
3
19
086
11

 

1.4.使用delattr动态的删除类或者方法成员

演示代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#!/usr/bin/env python
# -*-coding:utf-8-*-
 
:
 
:
name
 
:
.name
 
 
)
)
#删除掉了对象的普通字段name
)
)
#删除掉类的静态字段
#打印时说找不到些成员,报错

执行结果

1
2
3
4
5
:
>
abc
)
'name'

 

二.在当前模块中使用反射

获取到对应的模块.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#!/usr/bin/env python
# -*-coding:utf-8-*-
 
sys
 
:
:
 
]
#使用反射
#使用反射获取
)

 

以上是反射对类,对象,模块成员操作的基本方法.

 

三.使用字符串自动导入模块

依据传入的字符串,自动导入模块.类似上文的方法反射

1
2
3
4
5
6
7
importlib
 
)
 
)
)

执行结果

1
2
>
ait24

相关文章: