面向对象之反射

一. 什么是反射

专业解释:

指程序可以访问、检测和修改本身状态或者行为的一种能力

大白话:

通过字符串来操作对象的数据和功能

二. 反射的四个方法

  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': '清华大学'} 这一键值对
posted @ 2023-05-06 23:54  codegjj  阅读(0)  评论(0编辑  收藏  举报