社区微信群开通啦,扫一扫抢先加入社区官方微信群
社区微信群
反射的本质:
反射就是通过字符串的形式,导入模块;通过字符串的形式,去模块寻找指定函数,并执行。利用字符串的形式去对象(模块)中操作(查找/获取/删除/添加)成员,一种基于字符串的事件驱动!
下面我们通过反射机制在web路由上的应用来介绍反射
首先我们来看如下代码的设计:
users.py 模块中代码
visit模块中的代码:
执行结果:
从执行结果可以看到我们访问到了login()函数中的内容,但是如果我们有许许多多个这样的函数,该怎么办呢,总不能写许多个elif进行条件判断吧,所以我们就可以介绍反射,通过输入指定的字符串来动态的获取需要使用的函数。
这里我们将介绍getattr(),hasattr() 两个函数的使用方法
代码如下:
函数hasattr(object,str) 将接受两个参数,第一个为要访问的模块(或者对象)名,第二个参数是一个字符串(切记),并通过判断users模块中是否有我们需要访问的内容,如果有 返回True,没有则返回False并执行else代码块。
getatttr()函数参数与上面相同,作用是我们寻找到users模块中函数名为inp的函数,并且把此函数的内存地址赋值给fun,进而进行调用。这样就解决了要不停的elif的尴尬。
补充:
以上是解决的多个函数内容的动态调用,但是在生产环境下,我们避免不了要对多个模块中的内容进行动态调用。类似于这样:
接下来我们介绍import() 方法对模块进行动态调用。
运行结果如下:
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!