python面向对象中的反射:通过字符串的形式操作对象相关的属性
python中的一切事物都是对象(都可以使用反射)
四个反射相关的函数
-hasattr :判断是否有此变量,返回bool 值
-getattr : 获取属性值或者获取方法变量的地址
-setattr :给类或者对象设置属性或者方法 (用的场合很少,了解即可)
-delattr: 删除类或者对象的属性或方法(用的场合很少,了解即可)
- 反射类的属性和方法
- 反射对象的属性和方法
- 反射模块的属性和方法
getattr()
获取对象/类中的成员值
格式:getattr(对象,'属性名'[,成员不存在时的默认值])
返回值:成员的值
练习1:获取静态方法和类方法。
# 练习:获取静态方法和类方法
# getattr()
class Teacher(object):
dic1 = {'查看学生信息':'show_student','查看讲师信息':'show_teacher'}
def __init__(self,name,age):
self.name = name
self.age = age
# 类方法
@classmethod
def func(cls):
print('类方法...')
@staticmethod
def func1():
print('静态方法...')
def show_student(self):
print('show_student')
def show_teacher(self):
print('show_teacher')
#1.获取类
fun = getattr(Teacher,'func') # 将func的地址给了fun
fun()
# 2.获取静态方法
func1 = getattr(Teacher,'func1')
func1()
ret = getattr(Teacher,'dic1')
print(ret)
b = hasattr(Teacher,'dic1')
print(b)
2.获取对象的属性值和普通方法。
teacher = Teacher('zs',20)
name = getattr(teacher,'name') # 获取name属性值
print(name) # zs
age = getattr(teacher,'age') # 获取age属性值
print(age) # 20
hasattr()
检测对象/类是否具有某个成员
格式:hasattr(对象/类,'成员名')
返回值:布尔值
b = hasattr(Teacher,'dic1')
print(b) # True
teacher = Teacher('zs',18)
a = hasattr(teacher,'name')
print(a) # True
setattr()
设置或者添加对象/类中的成员
格式:setattr(对象,'成员名',值)
返回值:None
练习1:给A类对象添加静态age属性
class A(object):
pass
a = A()
setattr(a, 'age', 10)
print(a.age)
练习2:给A类中添加name属性
class A(object):
pass
a = A()
setattr(a, 'name', 'ww')
print(a.name)
delattr()
删除对象/类中的成员
格式: delattr(对象,成员)
返回值:None
练习3:删除a对象的name属性
class A(object):
pass
a = A()
delattr(a, 'name')
print(a.name) # 报错