参考:
https://www.liujiangblog.com/course/python/48
个人理解所谓反射即将"字符串"转化为"函数"
先说一下为什么要有反射,假如我们需要根据用户输入/配置文件来动态选择要执行的函数
例如:
https://www.liujiangblog.com/course/python/48
在主页面有一个根据用户输入做判断的分支,当有新的需求来了,我们就需要增加一个新的if分支,这种实现太蠢
仔细观察visit.py中的代码,会发现用户输入的url字符串和相应调用的函数名好像!如果能用这个字符串直接调用函数就好了!但是,前面已经说了字符串是不能用来调用函数的。为了解决这个问题,Python提供了反射机制,帮助我们实现这一想法,其主要就表现在getattr()等几个内置函数上!
getattr()函数的使用方法:接收2个参数,前面的是一个类或者模块,后面的是一个字符串。从模块或者类里,查找到和字符串“外形”相同的函数名,并将其返回
但是这样可能存在一个问题,加入模块或者类里没有对应的函数,调用getattr()就挂了
于是Python提供给我们一个hasattr函数,该函数和getattr参数一致,返回指定模块或类中是否存在指定函数
此外Python中还存在eval()也能实现反射功能,但是该函数不安全