python反射机制学习总结

一、反射概念理解

因为python是动态语言,只要是动态语言就一定会有反射机制。

反射机制含义:在程序运行过程中,动态获取对象的信息,以及动态调用对象方法的功能。

所以我们需要在程序运行过程中,让程序自己能动态获取到对象的属性和方法,而这种动态获取对象属性,以及动态调用对象方法的功能,就是反射机制。

查看对象有哪些属性的方法 obj.(__dict__)

obj.dir("属性") 这个方法可以查看到一个对象下面,可以点出来哪些属性

二、python如何实现反射机制

python提供四个内置函数:

obj.hasattr() 判断obj对象是否有某一个属性

obj.getattr() 获取obj对象的某一个属性

obj.setattr() 给obj对象某一个属性赋值

obj.delattr() 删除obj对象某一个属性

这四个函数就是通过字符串的形式,来操作对象的属性的

class Human():
    def __init__(self, name, age):
        self.name = name
        self.age = age

    def info(self):
        print('name:', self.name, 'age:', self.age)

obj = Human('蓝猫', 18)

print(hasattr(obj, 'name'))  # 输出结果:True
print(getattr(obj, 'name'))  # 输出结果:蓝猫。str类型   相当于obj.name,以字符串形式访问属性  print(obj.name)
setattr(obj, 'name', '小黄鸭')  # 没有返回值,输出是None
print(getattr(obj, 'name'))  # 输出结果:小黄鸭
delattr(obj, 'name')  # 没有返回值,输出是None
print(obj.__dict__)  # 输出结果:{'age': 18}

# getattr() 还可以传第三个参数
print(getattr(obj,'x',None))   #obj 对象没有 x 属性,就返回None,程序不会报错,有属性就取对应属性值

python反射机制:反射就是我们在不知道对象具体是什么的情况下,让我们的程序能够动态分析出来对象里面有什么,能够get出来什么属性。反过来说我们不知道使用者调用对象的什么方法,有可能使用者想调用的方法对象里面有,也有可能没有。所以我们需要让程序自动分析出来到底有没有,有就调用,没有就跳过

所以python反射机制是一种程序动态分析的能力

快捷键去掉黄色波浪线方法: Ctrl + Alt + L,达到美化python代码的效果

三、python反射机制应用场景

可以动态监测用户行为完成响应接口的调用

class Ftp:
    def put(self):
        print("正在上传数据------")
    def get(self):
        print('正在下载数据------')
    def interact(self):
        opt = input("请输入你要操作的项目").strip()
        print(dir(self)) # 获取该对象下所有的属性
        if hasattr(self,opt):# 判断该属性下是否有用户输入的属性
            getattr(self,opt)() # 如果用户刚好输入的是函数名加上括号就执行了该函数
        else:
            print("程序错误,功能不存在")

obj = Ftp()
obj.interact()
class Ftp:
    def put(self):
        print("正在上传数据")
    def get(self):
        print("正在下载数据")
    def interact(self):
        opt = input('请输入功能选项:').strip()
        getattr(self,opt,self.warnning)()   # 使用getattr() 第三个参数传值进去

    def warnning(self):
        print("功能错误")
obj = Ftp()
obj.interact()

这个例子说明,python反射和函数字典很像,定义一堆函数,把这些函数名都整理到了一个字典里面,接着让用户选择功能编号,用户选择不同的编号,我们就执行不同的函数。也可以算是一种反射的应用,比我们这个要麻烦一点。

这是我看了小飞哥视频的总结,若有补充或错去,欢迎各位大佬指出。

相关文章

汇总程序员学习Python必备的42个快捷键,看完收获满满

很多程序员在学习python的时候,是否遇到过一些操作不方便且很繁琐小问题,特别还会影响到你工作的进度,或许这50个快捷键能够帮助到你哦!首先先从Shift系列的按键开始:当然在学习Python的道路...

编程必备:全方位代码操作快捷键指南!

在Python编程中,熟练使用快捷键可以大大提高开发效率。以下是一些常用的Python快捷键,它们可以帮助你更快地编写和管理代码编辑和代码管理Ctrl+/:单行注释或取消注释。Ctrl+D:复制当前行...

UG编程第1节:快捷键的使用

UG编程第1节:快捷键的使用1. Ctrl+B:隐藏实例:鼠标左键选中圆柱(图1),按Ctrl+B,圆柱被隐藏(图2)。2. Ctrl+w:选择性显示/隐藏:实例:按Ctrl+w,弹出“显示与隐藏”对...

wxPython - 给菜单添加图标和快捷键

实战wxPython005在程序的菜单项中,为了操作的方便和更直观显示菜单的功能,可以给菜单项添加图标和快捷键,类wx.MenuItem为菜单项的具体实现,使用它可以方便地实现上述功能。wx.Menu...

Python必备技能,Pycharm常用快捷键,动图展示(二)

没想到前几天发的“Python必备技能,Pycharm常用快捷键,动图展示”一文,受到很多老哥老姐们的喜欢,基本上每三个人阅读,就有一个人收藏。那就干脆再来一波吧!Python必备技能,Pycharm...

UG编程第3节:草图的快捷键

1. L:直线实例:输入L,鼠标左键单击放置直线起点,设置线长和角度(图1),回车完成(图2)2. O:画圆实例:输入O,鼠标左键单击放置圆心,设置直径(图3),回车完成(图4)3. R:画矩形实例:...