00 字面意思理解反射 案例

jhchena發表於2024-09-28

字面意思理解反射

反射本質上就是透過字元的形式去操作物件/模組中的成員。

# 基於三個內建函式實現反射相關的功能 :
# 反射本質上就是透過字元的形式去操作物件/模組中的成員。

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

相關文章