python反射调用函数 python 反射调用函数

Python自省与反射这个也是python彪悍python反射调用函数的特性.
自省就是面向对象python反射调用函数的语言所写的程序在运行时,所能知道对象的类型.简单一句就是运行时能够获得对象的类型.比如type(),dir(),getattr(),hasattr(),isinstance().
反射机制就是在运行时,动态的确定对象的类型,并可以通过字符串调用对象属性、方法、导入模块 , 是一种基于字符串的事件驱动
通过源码注释python反射调用函数我们知道,它返回对象是否具有指定名称的属性 。而且它是通过调用getattr并捕获AttributeError异常来判断的 。就像上面的属性调用 , 我们就可以使用hasattr(a, "test")来判断,通过源码注释我们也可以思考一下,eval这种是不是也可以实现这种方法呢python反射调用函数?
但是这种方式是有缺陷的,因为test输出了两次,因为我们调用了两次test() , 这跟我们想要的效果不一样 。如果用hasattr呢 , 这个函数就不会在判断的时候调用一次了 。
【python反射调用函数 python 反射调用函数】 有了判断属性是否存在的函数,那么就得有获取属性的函数了.
从源码注释我们就能知道获取object对象的名为name的属性,想到与object.name,如果提供了default参数,那么当属性不存在的时候 , 就会返回默认值 。同样是上面的例子python反射调用函数:
从例子中我们可以看出,hasattr并没有调用test函数,而且getattr获取到的是函数对象,也没有调用它,通过我们主动执行func()才执行了a.test()函数,这样相比于exec和eval就灵活了许多 。
判断和获取属性有了,那么设置属性也是需要的.
Python反射介绍反射机制是面向对象编程语言中比较重要的功能,可以动态获取对象信息以及动态调用对象 , Python作为一门动态编程语言,当然也有反射机制,本文介绍Python反射函数使用方法 。
在程序运行时可以获取对象类型定义信息,例如 , Python中的type(obj)将返回obj对象的类型,这种获取对象的type、attribute或者method的能力称为反射 。通过反射机制 , 可以用来检查对象里的某个方法,或某个变量是否存在 。也就是可以通过字符串映射对象的方法或者属性。
Python反射常用的内置函数
先创建一个类:
利用反射的能力,我们可以通过属性字典__dict__来访问对象的属性:
执行输出:
接下来测试一下其他反射函数:
Out:
Out:
Out:
Out:
Out:
Out:
下面介绍两种Python反射的应用场景 。
从前面举的例子中 , 我们了解到可以通过字符串来获取对象的属性(getattr()),这是非常有用的一个功能 。比如,一个类中有很多方法 , 它们提供不同的服务,通过输入的参数来判断执行某个方法,一般的使用如下写法:
如果函数比较少这样写没有太大问题,如果有很多,这样写就比较复杂了 , 需要写大量else语句 , 可以使用反射机制来写:
这样是不是简洁了很多 , 上面的例子中,通过反射,将字符串变成了函数,实现了对对象方法的动态调用 。
可以通过setattr()方法进行动态属性设置,在使用scapy库构造报文时 , 我们需要设置某些报文字段,然而网络协议的报文字段很多,在需要设置大量字段时,一个一个的赋值就很麻烦:
可以使用setattr()方法来赋值:
--THE END--
python如何定义和调用函数1、函数定义
①使用def关键字定义函数

def 函数名(参数1.参数2.参数3...):

推荐阅读