反射(自省)的简单理解:
通过类名实例化对象;
得到类的所有属性和函数,并实现调用;
简单示例:
# -*- coding: utf-8 -*-
class User(object):
def __init__(self):
self.name = 'abc'
self.age = 18
def introduce(self):
print "My name is :"+self.name + ", age:" + str(self.age)
# 根据类名实例化对象
def get_obj(name):
obj = globals()[name]()
return obj
name = User.__name__ # 得到类名
u = get_obj(name)
u.introduce()
输出结果:
My name is :abc, age:18
常用函数:
print dir(u) # 返回该对象的所有属性和函数列表
print hasattr(u, 'name') # 判断是否存在传入的属性或函数
print getattr(u, 'name') # 得到对象属性值
print setattr(u, 'name', 'ccc') # 设置对象属性的值
print u.__dict__ # 返回该对象自定义属性