日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

内置函数补充 之 反射

發布時間:2025/3/15 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 内置函数补充 之 反射 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

getattr 反射

為什么要有反射?

當在設計一個頁面訪問的時候,通過用戶輸入相應的url,進入相應的頁面,在用戶輸入的url地址不存在的時候,返回404錯誤。

def run():inp = input('請輸入要訪問的url:')if inp == 'login':commons.login()elif inp == 'logout':commons.logout()elif inp == 'home':commons.home()else:print('404')run() def login():print('炫酷登錄頁面')def logout():print('炫酷退出頁面')def home():print('炫酷主頁面') commons.py

但通過以上的形式進行編寫,如果一旦需要增添更多的頁面的時候,代碼寫入的工作量就變得巨大?

?

getattr / hasattr

通過反射即可實現更高效的代碼,也是基于反射實現類Web框架的路由系統,

getattr(commons,inp) 的含義就是讓getattr自己去commons模塊中尋找inp輸入中對應的函數,即是login就對應login,是logout就應對logout。 import commonsdef run():inp = input('請輸入要訪問的url:')#利用字符串的形式去對象(模塊)中操作(尋找/檢查)成員if hasattr(commons,inp): #檢查是否有相應的成員,如果有進行操作func = getattr(commons,inp) #操作成員 func()else:print('404')run() def login():print('炫酷登錄頁面')def logout():print('炫酷退出頁面')def home():print('炫酷主頁面') commons.py

反射的4個內置函數分別為:

getattr、hasattr、setattr、delattr ,其作用為獲取成員、檢查成員、設置成員、刪除成員。

?

__import__()

如果不同的def函數沒有集中在同一個.py文件的模塊中,而是根據所能提供的不同功能,散列的分布在眾多的.py文件中的時候。

我們不可能去一個一個的import xxx對眾多的模塊進行一一導入,這個時候我們也可以對import的導入模塊的操作進行反射

即以"字符串"的形式導入模塊。

def run():inp = input('請輸入要訪問的url:')m,f = inp.split('/')obj = __import__(m)if hasattr(obj,f): #檢查是否有相應的成員,如果有進行操作func = getattr(obj,f) #操作成員 func()else:print('404')run()

?

__import__()和各.py文件之間的關系圖

?

?

如果其中一個.py文件在另一個文件下目錄之下就要通過fromlist = True來找到該.py文件

def run():inp = input('請輸入要訪問的url:')m,f = inp.split('/')obj = __import__("lib." + m, fromlist = True) #該模塊在lib文件下路徑之下的時候if hasattr(obj,f): #檢查是否有相應的成員,如果有進行操作func = getattr(obj,f) #操作成員 func()else:print('404')run()

?

總結:

反射的實例:偽造Web框架的路由系統

反射:基于字符串的形式去對象(模塊)中操作其成員。getattr、hasattr、setattr、delattr?。

擴展:導入模塊

import xxx from xxx import oooobj = __import__("xxx") obj = __import__("xxx.oo.xxx", fromlist=True)

?

轉載于:https://www.cnblogs.com/evenyao/p/9190868.html

總結

以上是生活随笔為你收集整理的内置函数补充 之 反射的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。