字面意思理解反射
反射本質上就是透過字元的形式去操作物件/模組中的成員。
# 基於三個內建函式實現反射相關的功能 :
# 反射本質上就是透過字元的形式去操作物件/模組中的成員。
# 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()