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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

Python- 反射 及部份内置属性方法

發布時間:2025/3/21 python 14 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Python- 反射 及部份内置属性方法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

@property
類的靜態屬性,封裝內部具體實現細節,調用的時候類似調用數據屬性。既可以訪問類屬性,也可以訪問實例屬性

![](https://s1.51cto.com/images/blog/201906/08/6de11e5b657bbb1c6e02f4ed64821fa7.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)

@classmethod
類方法

![](https://s1.51cto.com/images/blog/201906/08/d36f46a721750e99047808d30276f111.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)

@staticmethod
類的工具包,不能使用類變量和實例變量

繼承順序

第二種

繼承、多態、封裝

多態:在不同的類實例化得到的對象,調用同一個方法,執行的邏輯不同

封裝
封裝數據:將數據隱藏起來這不是目的。隱藏起來然后對外提供操作該數據的接口,然后我們可以在接口附加上對該數據操作的限制,以此完成對數據屬性操作的嚴格控制。
封裝方法:目的是隔離復雜度

封裝在于明確區分內外,使得類實現者可以修改封裝內的東西而不影響外部調用者的代碼;而外部使用用者只知道一個接口(函數),只要接口(函數)名、參數不變,使用者的代碼永遠無需改變。這就提供一個良好的合作基礎——或者說,只要接口這個基礎約定不變,則代碼改變不足為慮。

反射

反射 主要是指程序可以訪問、檢測和修改它本身狀態或行為的一種能力(自省)。

`getattr(object, name, default=None)```:判斷object中有沒有一個name字符串對應的方法或屬性

hasattr(object,'name') - 檢測是否含有某屬性 

setattr(object,name,True)  - 設置屬性\

delattr(object,'name') - 刪除屬性

基于反射- 動態導入模塊

內置屬性方法

getattrdelattr , setattr

getattr :一個對象在調不存在的屬性時候,就會自動觸發。

delattr : 一個對象刪除類屬性或對象屬性時候,會觸發

setattr : 在設置屬性或新增屬性時候,默認就會觸發 setattr ,如果在創建類的時候重新定義了setattr方法,要寫上操作屬性字典代碼,不寫就增加屬性不成功

利用上述幾個內置方法,可以二次加工標準類型。比如重新定義setattr,在新增屬性之前加點自定義參數

包裝一個類型通常是對已存在的類型的一些定制,這種做法可以新建,修改或刪除原有產品的功能。其它的則保持原樣。授權的過程,即是所有更新的功能都是由新類的某部分來處理,但已存在的功能就授權給對象的默認屬性。

實現授權的關鍵點就是覆蓋getattr方法

setitem,getitem,delitem 用字典方式調用屬性的時候就會觸發。如:kk['name']

用點(.)方式調用屬性會觸發 getattr等方法。如:kk.name

str,repr,:改變對象的字符串顯示str,repr
自定制格式化字符串format

str函數或者print函數--->obj.str()
repr或者交互式解釋器--->obj.repr()
如果str沒有被定義,那么就會使用repr來代替輸出
注意:這倆方法的返回值必須是字符串,否則拋出異常

slots

slots是一個類變量,變量值可以是列表,元祖,或者可迭代對象,也可以是一個字符串(意味著所有實例只有一個數據屬性)

使用點來訪問屬性本質就是在訪問類或者對象的dict屬性字典(類的字典是共享的,而每個實例的是獨立的),字典會占用大量內存,如果有一個類,屬性很少,但是實例很多,為了節省內存可以使用slots取代實例的dict。(可以說是用來作為一個內存優化工具)

定義了slots后的類不再 支持一些普通類特性了,比如多繼承

del

析構方法,當對象在內存中被釋放時,自動觸發執行。

注:如果產生的對象僅僅只是python程序級別的(用戶級),那么無需定義del,如果產生的對象的同時還會向操作系統發起系統調用,即一個對象有用戶級與內核級兩種資源,比如(打開一個文件,創建一個數據庫鏈接),則必須在清除對象的同時回收系統資源,這就用到了del

nextiter實現迭代器協議

轉載于:https://blog.51cto.com/11533525/2409064

總結

以上是生活随笔為你收集整理的Python- 反射 及部份内置属性方法的全部內容,希望文章能夠幫你解決所遇到的問題。

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