python的函數反射,python 反射調用函數

Python中如果對基礎類型進行反射,比如int、float

動態語言里面的eval就是干這個用的

創新互聯是專業的陵川網站建設公司,陵川接單;提供成都網站設計、成都網站建設,網頁設計,網站設計,建網站,PHP網站建設等專業做網站服務;采用PHP框架,可快速的進行陵川網站開發網頁制作和功能擴展;專業做搜索引擎喜愛的網站,專業的做網站團隊,希望更多企業前來合作!

type1="int"

type2="str"

a=eval(type1+"(2222)") 這里a就是int型的2222 相當于執行a=eval("int(2222)")

b=eval(type2+("2222")) 這里b就是string型的"2222" 相當于執行b=eval("str(2222)")

另外Python偏函數特性也比較像這個,你可以搜索下看看。

Python自省與反射

這個也是python彪悍的特性.

自省就是面向對象的語言所寫的程序在運行時,所能知道對象的類型.簡單一句就是運行時能夠獲得對象的類型.比如type(),dir(),getattr(),hasattr(),isinstance().

反射機制就是在運行時,動態的確定對象的類型,并可以通過字符串調用對象屬性、方法、導入模塊,是一種基于字符串的事件驅動

通過源碼注釋我們知道,它返回對象是否具有指定名稱的屬性。而且它是通過調用getattr并捕獲AttributeError異常來判斷的。就像上面的屬性調用,我們就可以使用hasattr(a, "test")來判斷,通過源碼注釋我們也可以思考一下,eval這種是不是也可以實現這種方法呢?

但是這種方式是有缺陷的,因為test輸出了兩次,因為我們調用了兩次test(),這跟我們想要的效果不一樣。如果用hasattr呢,這個函數就不會在判斷的時候調用一次了。

有了判斷屬性是否存在的函數,那么就得有獲取屬性的函數了.

從源碼注釋我們就能知道獲取object對象的名為name的屬性,想到與object.name,如果提供了default參數,那么當屬性不存在的時候,就會返回默認值。同樣是上面的例子:

從例子中我們可以看出,hasattr并沒有調用test函數,而且getattr獲取到的是函數對象,也沒有調用它,通過我們主動執行func()才執行了a.test()函數,這樣相比于exec和eval就靈活了許多。

判斷和獲取屬性有了,那么設置屬性也是需要的.

動態加載模塊,python反射機制

動態加載模塊用的模塊importlib 里面的import_module(“字符串模塊路徑”, 相對路徑包名)

2.getattr(對象,“字符串屬性”,默認值)

補充

任意創建一個文件夾,在里面同級創建f1-f4.py的四個文件。

內容如下:

f1.py

f2.py

f3.py

f4.py

f5.py

f4.py:通過動態導入模塊,動態添加屬性 刪除。可以解決接口自動化中的動態傳參

F5.py: 通過傳參的方式,去獲取類的實例方法,可以做到不知道需要哪個方法的時候,用字符串的方法去調用需要的方法。接口自動化中參數化的時候可以用到。

反射機制,當通過類名去反射得到的實例方法,需要傳類名進去。通過self或者對象得到的實例方法,不需要傳self或者類名。如果是實例對象或者類 去調用靜態方法, 都不用給函數傳self cls

Python中的單例模式與反彈機制

一。單例模式

一般情況下,類可以生成任意個實例,而單例模式只生成一個實例

我們先用單例模式設計一個Rectangle類

然后用__new__方法設計單例模式,代碼如下

然后我們來驗證下,單例模式下是否只能生成一個實例

單例模式在程序設計中比較典型的應用場景:多個用戶同時調用某個模塊時,會生成一些日志,我們希望這些日志存在同一個文件內,而不是多個文件。

在生成日志模塊我們就可以采用單例模式進行設計。

二。反射

概念:簡單來說就是可以利用字符串來映射模塊中的相應方法然后可以操作模塊中相應的方法

我們以一個飯店點菜的實際場景來理解Python的反射機制

hasatter(對象,屬性或方法名)

判斷對象中是否有某個屬性或某個方法,返回值是布爾型

getattr(對象,屬性或方法名,缺省值) 判斷對象中是否有某個屬性或某個方法,如果有返回方法本身,沒有則返回缺省值

setattr(對象,屬性,新值)

將實例的屬性改為新的值,如果屬性不存在則新建

我們給實例guke1加個價格屬性

標題名稱:python的函數反射,python 反射調用函數
分享網址:http://m.kartarina.com/article24/hdpgje.html

成都網站建設公司_創新互聯,為您提供關鍵詞優化企業建站服務器托管網站內鏈ChatGPT域名注冊

廣告

聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯

成都網頁設計公司
主站蜘蛛池模板: 97无码免费人妻超级碰碰碰碰| 无码137片内射在线影院| 2019亚洲午夜无码天堂| 性虎精品无码AV导航| 中文字幕精品无码一区二区 | 国产网红无码精品视频| 久久久久亚洲av无码专区导航| 成人年无码AV片在线观看| 亚洲大尺度无码专区尤物| 国产成人无码av在线播放不卡| 久久亚洲精品无码| 国产福利电影一区二区三区久久老子无码午夜伦不 | 精品人体无码一区二区三区| 少妇无码一区二区三区免费| 一本大道久久东京热无码AV| 99久久人妻无码精品系列蜜桃| 国产综合无码一区二区三区| 97无码免费人妻超级碰碰夜夜| 久久久久久亚洲Av无码精品专口| 一本一道AV无码中文字幕| 国产精品国产免费无码专区不卡| 亚洲欧洲av综合色无码| 中文无码字慕在线观看| 亚洲AV无码一区二区二三区入口| 一本大道久久东京热无码AV| 国产一区二区三区无码免费 | 亚洲成a人片在线观看天堂无码| 亚洲AV无码第一区二区三区| 中文人妻无码一区二区三区| 日韩va中文字幕无码电影| 日韩中文无码有码免费视频 | 无码狠狠躁久久久久久久| 久久亚洲精品无码aⅴ大香| 无码av最新无码av专区| 久久精品亚洲中文字幕无码麻豆| 无码欧精品亚洲日韩一区| 亚洲熟妇无码爱v在线观看| 亚洲AV色吊丝无码| 亚洲精品无码mⅴ在线观看| 97在线视频人妻无码| 精品无码久久久久久久久久|