面向对象之反射
一. 什么是反射
专业解释:
指程序可以访问、检测和修改本身状态或者行为的一种能力
大白话:
通过字符串来操作对象的数据和功能
二. 反射的四个方法
hasattr(): 判断对象是否含有字符串对应的数据或者功能
getattr(): 根据字符串获取对应的变量名或者函数名
setattr(): 根据字符串给对象设置键值对(名称空间中的名字)
delattr(): 根据字符串删除对象对应的键值对(名称空间中的名字)
三. 反射实际应用
"""编写一个小程序 判断Student名称空间中是否含有用户指定的名字 如果有则取出展示"""
# 不使用反射不容易实现
class Student(object):
school = '清华大学'
def get(self):
pass
print(hasattr(Student, 'school')) # True
print(hasattr(Student, 'get')) # True
print(hasattr(Student, 'post')) # False
print(getattr(Student, 'school')) # 清华大学
print(getattr(Student, 'get')) # <function Student.get at 0x10527a8c8>
setattr(Student,'level','贵族学校')
print(Student.__dict__) # {"key1": "value1", "key2": "value2",······, 'level': '贵族学校'}
delattr(Student, 'school')
print(Student.__dict__) # 将删除 {'school': '清华大学'} 这一键值对