00 字面意思理解反射 案例
字面意思理解反射
反射本质上就是通过字符的形式去操作对象/模块中的成员。
# 基于三个内置函数实现反射相关的功能 :
# 反射本质上就是通过字符的形式去操作对象/模块中的成员。
# getattr() # 使用最高
# setattr() # 使用较少
# hasattr() # 其次使用
from utils import db
from utils import encrpty
from utils import helper
def run():
message = db.show()
print(message)
password = '123'
res = encrpty.md5(password)
# 传统访问方式
# 1. 导入获得->模块对象
# from util import helper
# 2.访问成员
helper.convert()
helper.gb_to_mb()
func = getattr(helper, 'convert')
# getattr 得到一个函数,相当于找到:helper.convert, 等价于:helper.convert()
func()
xx = getattr(helper, 'gb_to_mb') # 等价于: helper.gb_to_mb()
xx()
# hasattr 判断是不是存在这个成员,如果存在为 True,不存在为:False
status = hasattr(helper, 'convert')
print(status) # True
# setattr,给他进行赋值,要写的对象:helper,CITY表示key,北京 表示值
# 表示在helper对象里面,增加一个全局变量:CITY,值为:北京
setattr(helper, 'CITY', "北京")
# 通过 helper.CITY即可进行调用 setattr 设置的全局变量
print(helper.CITY)
print(getattr(helper, "CITY"))
# 表示在helper中,增加一个函数,里面为lamdba表达式,传入参数x ,返回的x +100
setattr(helper, "get_info", lambda x: x + 100)
ret = helper.get_info(100)
print(ret)
new_func = getattr(helper, "get_info")
res = new_func(200)
print(res)
if __name__ == '__main__':
run()