什么是反射

在Python中,反射指的是通过字符串来操作对象的属性,有四种方法

  • hasattr()判断对象是否含有字符串对应的数据或者功能
  • getattr()根据字符串获取对应的变量名或者函数名
  • setattr()根据字符串给对象设置键值对(名称空间中的名字)
  • delattr()根据字符串删除对象对应的键值对(名称空间中的名字)

基本使用

hasattr使用

class Student(object):
    school = '清华大学'

    def get(self):
        pass


print(hasattr(Student, 'school'))
# True
print(hasattr(Student, 'get'))
# True
print(hasattr(Student, 'post'))
# False

getattr使用

class Student(object):
    school = '清华大学'

    def get(self):
        pass


print(getattr(Student, 'school'))
# 清华大学
print(getattr(Student, 'get'))
# <function Student.get at 0x7feca09c0510>
print(getattr(Student, 'post'))  # 不存在报错

setatter使用

class Student(object):
    school = '清华大学'

    def get(self):
        pass


setattr(Student, 'school', '北京大学')
print(Student.school)
# 北京大学

delattr使用

class Student(object):
    school = '清华大学'

    def get(self):
        pass


delattr(Student, 'school')
print(Student.__dict__)

反射实际应用

class FtpServer:
    def serve_forever(self):
        while True:
            inp = input('input your cmd>>: ').strip()
            try:
                cmd, file = inp.split()
            except ValueError:
                print("输入错误")
                continue
            if hasattr(self, cmd):  # 根据用户输入的cmd,判断对象self有无对应的方法属性
                func = getattr(self, cmd)  # 根据字符串cmd,获取对象self对应的方法属性
                func(file)
            else:
Last modification:April 15, 2022
如果觉得我的文章对你有用,请随意赞赏