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()

posted @ 2024-09-28 07:52  jhchena  阅读(2)  评论(0编辑  收藏  举报