python中的魔術方法

魔術方法


魔術方法就是一個類/對象中的方法,和普通方法唯一的不同時,普通方法需要調用!而魔術方法是在特定時刻自動觸發。

1.__init__

初始化魔術方法
觸發時機:初始化對象時觸發(不是實例化觸發,但是和實例化在一個操作中)
參數:至少有一個self,接收對象
返回值:無
作用:初始化對象的成員
注意:使用該方式初始化的成員都是直接寫入對象當中,類中無法具有

2.__new__

實例化魔術方法
觸發時機: 在實例化對時觸發
參數:至少一個cls 接收當前類
返回值:必須返回一個對象實例
作用:實例化對象
注意:實例化對象是Object類底層實現,其他類繼承了Object的__new__才能夠實現實例化對象。
沒事別碰這個魔術方法,先觸發__new__才會觸發__init__ 

3.__del__

析構魔術方法
觸發時機:當對象沒有用(沒有任何變量引用)的時候被觸發
參數:一個self 結婚搜對象
返回值:無
作用:使用完對象是回收資源
注意:del不一定會觸發當前方法,只有當前對象沒有任何變量接收時才會觸發

4.__call__

調用對象的魔術方法
觸發時機:將對象當作函數調用時觸發 對象()
參數:至少一個self接收對象,其余根據調用時參數決定
返回值:根據情況而定
作用:可以將復雜的步驟進行合并操作,減少調用的步驟,方便使用
注意:無

5.__len__

觸發時機:使用len(對象) 的時候觸發
參數:一個參數self
返回值:必須是一個整型
作用:可以設置為檢測對象成員個數,但是也可以進行其他任意操作
注意:返回值必須必須是整數,否則語法報錯,另外該要求是格式要求。

6.__str__

觸發時機:使用print(對象)或者str(對象)的時候觸發
參數:一個self接收對象
返回值:必須是字符串類型
作用:print(對象時)進行操作,得到字符串,通常用于快捷操作
注意:無

7.__repr__

觸發時機:在使用repr(對象)的時候觸發
參數:一個self接收對象
返回值:必須是字符串
作用:將對象轉使用repr化為字符串時使用,也可以用于快捷操作

repr函數和str函數處理字符串只有一個區別:

str的結果 字符串本身 (結果可以被eval執行)

如:x = '無圖言Diao' str() ->無圖言Diao

rerpr的結果 字符串定義結構 (eavl不會執行repr結果)

如:x = '無圖言Diao' repr() ->'無圖言Diao'

備注: 在類中通常情況下__str__和__repr__ 設置相同即可

eval()

函數 將字符串當作python代碼執行

格式:eval(字符串)

返回值:可以有返回值

8.__bool__

觸發時機: 使用bool(對象)的時候觸發
參數:一個self接收對象
返回值:必須是布爾值
作用:根據實際情況決定,可以作為快捷方式使用
注意:僅適合于返回布爾值的操作

9.__format__

觸發時機:使用字符串.format(對象)時候觸發
參數:一個self接收對象,一個參數接收format的{}中的格式,例如:>5
返回值:必須是字符串
作用:設置對象可以作為format的參數,并且自定義對象格式化的規則
注意:無

描述符相關的魔術方法


1.__get__()

觸發時機:在獲取指定描述符操作的成員屬性的值的時候觸發
參數:1描述符對象本身,2描述符描述的屬性所在的對象,描述符描述的對象的類
返回值:必須有,不然無法獲取相應屬性值
注意:僅在描述符中使用

2.__set__()

觸發時機:在設置或者添加指定描述符操作的成員屬性的時候觸發
參數:1描述符對象本身,2描述符描述的屬性所在的對象,3要設置的值
返回值:無
注意:僅在描述符中使用

3.__delete__()

觸發時機:在刪除指定描述符操作的成員屬性的時候觸發
參數:1描述符對象本身,2描述符描述的屬性所在的對象
返回值:無
注意:僅在描述符中使用

與屬性操作相關的魔術方法


1.__getattr__()

觸發時機:獲取不存在的對象成員時觸發
參數:1接收當前對象的self,一個是獲取成員名稱的字符串
返回值:必須有值
作用:為訪問不存在的屬性設置值
注意:getattribute無論何時都會在getattr之前觸發,觸發了getattribute就不會在觸發getattr了

2.__setattr__()

觸發時機:設置對象成員值的時候觸發
參數:1個當前對象的self,一個是要設置的成員名稱字符串,一個是要設置的值
返回值:無 過程操作
作用:接管設置操作,可以在設置前之前進行判斷驗證等行為
注意:在當前方法中無法使用成員=值的方式直接設置成員,否則會無限遞歸,必須借助object的設置方法來完成

object.setattr(參數1,參數2,參數3)

3.delattr()

觸發時機:刪除對象成員時觸發
參數:一個當前對象的self
返回值:無
作用:可以在刪除成員時進行驗證。

4.__getattribute__()

觸發時機:使用對象成員時觸發,無論成員是否存在
參數:1個接收當前對象self,一個是獲取的成員的名稱字符串
返回值:必須有
作用:在具有封裝操作(私有化時),為程序開部分訪問權限使用

5.__dir__()

觸發時機:dir(對象)的時候觸發
參數:1個接收當前對象self
返回值:必須為序列類型(列表,元組,集合等,)
作用:可以自定義成員列表的返回值

運算相關魔術方法(上帝模式)


比較運算相關魔術方法


1.__lt__()

格式:def __lt__(self,other):return 數據

特征:
觸發時機:進行小于判斷時自動觸發
參數:2個參數第一個是self,第二個判斷的第二個對象
返回值:返回值可以任意類型,推薦布爾值
作用:定義小于號的行為:x < y 調用 x.lt(y)

2.le()

格式:def __le__(self):return str特征:觸發時機:進行小于等于判斷時自動觸發參數:2個參數第一個是self,第二個判斷的第二個對象返回值:返回值可以任意類型,推薦布爾值作用:定義小于等于號的行為:x <= y 調用 x.le(y)

3.__gt__()

格式:def __gt__(self):return str特征:觸發時機:進行大于判斷時自動觸發參數:2個參數第一個是self,第二個判斷的第二個對象返回值:返回值可以任意類型,推薦布爾值作用:定義大于號的行為:x > y 調用 x.gt(y)

4.__ge__()

格式:def __ge__(self):return str特征:觸發時機:進行大于等于判斷時自動觸發參數:2個參數第一個是self,第二個判斷的第二個對象返回值:返回值可以任意類型,推薦布爾值作用:定義大于等于號的行為:x >= y 調用 x.ge(y)

5.__eq__()

格式:def __eq__(self):return str特征:觸發時機:進行等于判斷時自動觸發參數:2個參數第一個是self,第二個判斷的第二個對象返回值:返回值可以任意類型,推薦布爾值作用:定義大于等于號的行為:x == y 調用 x.eq(y)

6.__ne__()

格式:def __ne__(self):return str特征:觸發時機:進行不等于判斷時自動觸發參數:2個參數第一個是self,第二個判斷的第二個對象返回值:返回值可以任意類型,推薦布爾值作用:定義不等號的行為:x != y 調用 x.ne(y)

算術運算相關魔術方法


__add__(self, other)           定義加法的行為:+
__sub__(self, other)           定義減法的行為:-
__mul__(self, other)           定義乘法的行為:
__truediv__(self, other)       定義真除法的行為:/
__floordiv__(self, other)      定義整數除法的行為://
__mod__(self, other)           定義取模算法的行為:%
__divmod__(self, other)        定義當被 divmod() 調用時的行為
__pow__(self, other[, modulo]) 定義當被 power() 調用或 ** 運算時的行為
__lshift__(self, other)        定義按位左移位的行為:<<
__rshift__(self, other)        定義按位右移位的行為:>>
__and__(self, other)           定義按位與操作的行為:&
__xor__(self, other)           定義按位異或操作的行為:^
__or__(self, other)            定義按位或操作的行為:|

反運算相關魔術方法


__radd__(self, other)      與上方相同,當左操作數不支持相應的操作時被調用
__rsub__(self, other)      與上方相同,當左操作數不支持相應的操作時被調用
__rmul__(self, other)      與上方相同,當左操作數不支持相應的操作時被調用
__rtruediv__(self, other)  與上方相同,當左操作數不支持相應的操作時被調用
__rfloordiv__(self, other) 與上方相同,當左操作數不支持相應的操作時被調用
__rmod__(self, other)      與上方相同,當左操作數不支持相應的操作時被調用
__rdivmod__(self, other)   與上方相同,當左操作數不支持相應的操作時被調用
__rpow__(self, other)      與上方相同,當左操作數不支持相應的操作時被調用
__rlshift__(self, other)   與上方相同,當左操作數不支持相應的操作時被調用
__rrshift__(self, other)   與上方相同,當左操作數不支持相應的操作時被調用
__rand__(self, other)      與上方相同,當左操作數不支持相應的操作時被調用
__rxor__(self, other)      與上方相同,當左操作數不支持相應的操作時被調用
__ror__(self, other)       與上方相同,當左操作數不支持相應的操作時被調用

賦值運算相關魔術方法


__iadd__(self, other)             定義賦值加法的行為:+=
__isub__(self, other)             定義賦值減法的行為:-=
__imul__(self, other)             定義賦值乘法的行為:=
__itruediv__(self, other)         定義賦值真除法的行為:/=
__ifloordiv__(self, other)        定義賦值整數除法的行為://=
__imod__(self, other)             定義賦值取模算法的行為:%=
__ipow__(self, other[, modulo])   定義賦值冪運算的行為:**=
__ilshift__(self, other)          定義賦值按位左移位的行為:<<=
__irshift__(self, other)          定義賦值按位右移位的行為:>>=
__iand__(self, other)             定義賦值按位與操作的行為:&=
__ixor__(self, other)             定義賦值按位異或操作的行為:^=
__ior__(self, other)              定義賦值按位或操作的行為:|=

一元運算相關魔術方法


__pos__(self)      定義正號的行為:+x
__neg__(self)      定義負號的行為:-x
__abs__(self)      定義當被 abs() 調用時的行為
__invert__(self)   定義按位求反的行為:~x

類型轉換相關魔術方法 JIANG


__complex__(self)      定義當被 complex() 調用時的行為(需要返回恰當的值)
__int__(self)          定義當被 int() 調用時的行為(需要返回恰當的值)
__float__(self)        定義當被 float() 調用時的行為(需要返回恰當的值)
__round__(self[, n])   定義當被 round() 調用時的行為(需要返回恰當的值)
__index(self)__        1. 當對象是被應用在切片表達式中時,實現整形強制轉換2. 如果你定義了一個可能在切片時用到的定制的數值型,你應該定義 index3. 如果 index 被定義,則 int 也需要被定義,且返回相同的值

上下文管理相關魔術方法


__enter__()__exit__()

enter(self)1. 定義當使用 with 語句時的初始化行為2. enter 的返回值被 with 語句的目標或者 as 后的名字綁定

exit(self, exctype, excvalue, traceback)
1. 定義當一個代碼塊被執行或者終止后上下文管理器應該做什么
2. 一般被用來處理異常,清除工作或者做一些代碼塊執行完畢之后的日常工作

容器類型相關魔術方法


__len__(self)                  定義當被 len() 調用時的行為(返回容器中元素的個數)
__getitem__(self, key)         定義獲取容器中指定元素的行為,相當于 self[key]
__setitem__(self, key, value)  定義設置容器中指定元素的行為,相當于 self[key] = value
__delitem__(self, key)         定義刪除容器中指定元素的行為,相當于 del self[key]
__iter__(self)                 定義當迭代容器中的元素的行為
__reversed__(self)             定義當被 reversed() 調用時的行為
__contains__(self, item)       定義當使用成員測試運算符(in 或 not in)時的行為

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/455990.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/455990.shtml
英文地址,請注明出處:http://en.pswp.cn/news/455990.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

2016年光伏電站交易和融資的十大猜想

1領跑者計劃備受關注&#xff0c;競價上網或從試點開始 領跑者計劃規模大&#xff0c;上網條件好&#xff0c;又有政府背書&#xff0c;雖說價格也不便宜&#xff0c;但省去很多隱性成本&#xff0c;對于致力于規模化發展的大型企業來說仍是首要選擇。同時&#xff0c;從能源管…

loading gif 透明_搞笑GIF:有這樣的女朋友下班哪里都不想去

原標題&#xff1a;搞笑GIF&#xff1a;有這樣的女朋友下班哪里都不想去這樣的廣場舞看著不涼快嗎&#xff1f;大哥慢點&#xff0c;機器經受不住你這樣的速度求孩子的心里陰影面積生孩子就是用來玩的。有這樣的媳婦做飯&#xff0c;下班哪里也不想去1.領導在門外用門夾核桃&am…

Redis數據庫 【總結筆記】

一、NoSql&#xff08;非關系型數據庫&#xff09; NoSQL&#xff1a;NoSQL Not Only SQL 非關系型數據庫 ? NoSQL&#xff0c;泛指非關系型的數據庫。隨著互聯網web2.0網站的興起&#xff0c;傳統的關系數據庫在應付web2.0網站&#xff0c;特別是超大規模和高并發的SNS類型…

基于IP的H.264關鍵技術

一、 引言 H.264是ITU-T最新的視頻編碼標準&#xff0c;被稱作ISO/IEC14496-10或MPEG-4 AVC&#xff0c;是由運動圖像專家組(MPEG)和ITU的視頻編碼專家組共同開發的新產品。H.264分兩層結構&#xff0c;包括視頻編碼層和網絡適配層。視頻編碼層處理的是塊、宏塊和片的數據&…

“光伏進社區” 應及早謀劃布局

所謂“光伏進社區”就是全國城鄉居民家庭大批量的利用家庭光伏系統&#xff0c;甚至出現光伏的社區化聯網交換、合作等更深入的活動。雖然“光伏進社區”還有很長的路要走&#xff0c;但“光伏進社區”的各種經濟、技術、社會條件正越來越向有利方向發展。 城鄉居民集聚社區是光…

python中的裝飾器和抽象類

裝飾器和抽象類 裝飾器就是對函數或者方法或者類進行修飾 #第一步&#xff1a;創建一個普通函數 def laxi():print(噗哧噗哧噗哧噗哧&#xff5e;&#xff5e;&#xff5e;)#調用函數 laxi() laxi()#第二步&#xff1a;擴展函數的功能(不是裝飾器) #聲明一個擴展函數 def deco…

eigen庫安裝_OpenCV+Eigen上位機程序移植(七十一)

1、給硬盤分區現在小伙伴們對于給電腦硬盤分區想必比較頭疼&#xff0c;給電腦硬盤分區分為兩種情況&#xff0c;一是在安裝系統之前給系統硬盤分區&#xff0c;二是在安裝系統之后給硬盤分區&#xff0c;我們現在購買的品牌機和筆記本的用戶比較多&#xff0c;而且筆記本和品牌…

【實戰操作】使用FFmpeg將一個視頻文件中音頻合成到另一個視頻中 只需三秒

直接進入主題 主要參數&#xff1a; -i——設置輸入文件名。-f——設置輸出格式。-y——若輸出文件已存在時則覆蓋文件。-fs——超過指定的文件大小時則結束轉換。-t——指定輸出文件的持續時間&#xff0c;以秒為單位。-ss——從指定時間開始轉換&#xff0c;以秒為單位。-t從…

蘋果依舊強大 物聯網領域舉足輕重

近幾天科技界最火爆的話題就是蘋果和谷歌兩家公司&#xff0c;一是蘋果發布財報&#xff0c;二是谷歌人工智能圍棋戰勝歐洲冠軍以及谷歌母公司Alphabet或將超越蘋果&#xff0c;成為世界上市值最大的公司。而在我眼里&#xff0c;未來五年內依然屬于蘋果。回顧下蘋果公司公布的…

linux之SQL語句簡明教程---SUBSTRING

SQL 中的 substring 函數是用來抓出一個欄位資料中的當中一部分。這個函數的名稱在不同的資料庫中不全然一樣&#xff1a; MySQL: SUBSTR( ), SUBSTRING( )Oracle: SUBSTR( )SQL Server: SUBSTRING( )最經常使用到的方式例如以下 (在這里我們用 SUBSTR( ) 為例)&#xff1a; SU…

H.264/AVC技術進展及其務實發展策略思考

隨著NGN、3G及3G演進和NGBW等對視頻、多媒體業務與網絡應用的飛速發展需求&#xff0c;作為視頻業務及存儲應用核心技術的高效率 視頻數字壓縮編(譯碼)技術&#xff0c;愈來愈引起人們的關注&#xff0c;成為目前廣播、視頻與多媒體通信領域中的亮點與熱點。制定視頻編碼標準的…

python中錯誤和異常處理

錯誤和異常處理 在python中一共有2種錯誤&#xff1a;一種是語法錯誤&#xff0c;另外一種是異常。 語法錯誤 語法錯誤也叫做解析錯誤&#xff0c;是指python無法正確的識別代碼的造成的。根本原因在于人的行為&#xff1a;手殘&#xff0c;腦殘和眼殘的行為。 解決方法&#x…

listview 每行后面的小箭頭_主臥帶小衣帽裝修,這幾個裝修方案,你喜歡哪個?...

南京裝修交流圈 - 知乎?www.zhihu.com現在大部分人購買的房子面積還是普遍偏小的&#xff0c;每行每業都有自己的服裝講究&#xff0c;不同的場地、見不同的人等等。家中能有一個衣帽間自然也就是心中所向往和追求的。能夠有獨立的一個房間來做衣帽間當然更好&#xff0c;今天…

【養成好習慣】使用pipreqs導出本項目使用的環境

pipreqs pipreqs可以幫你找到當前項目的所有組件及其版本。就是當別人給你一個程序的時候&#xff0c;你要在自己電腦上運行起來&#xff0c;就需要安裝程序所依賴的組件&#xff0c;總不能自己一個一個找吧。 # 安裝 pip install -i https://pypi.tuna.tsinghua.edu.cn/simpl…

開放醫療交通大數據技術 服務于公共便民領域

孫丕恕還建議&#xff0c;交通擁堵的數據也可以開放&#xff0c;孫丕恕介紹&#xff0c;目前已有導航軟件有部分數據&#xff0c;但還有些滯后&#xff0c;如果能夠做到實時更新數據&#xff0c;那么也可以為出行者避開擁堵&#xff0c;節約時間。此外&#xff0c;如果二手車的…

Nagios_在不同平臺下的安裝

Nagios 是一款開源的免費網絡監視工具&#xff0c;致力于打造符合行業標準的 IT 基礎架構的監控系統。Nagios 提供了服務器、網絡和應用的完整的 IT 監控和報警&#xff0c;可以有效監控 Windows、Linux 和 Unix 的主機狀態&#xff0c;以及交換機、路由器、打印機等網絡設備。…

python中的模塊和包

模塊和包 一個模塊就是一個包含python代碼的文件。一個文件就是一個模塊 為什么要使用模塊 1.現在程序開發文件比較大&#xff0c;都放在一個文件中維護不方便&#xff0c;拆分成多個文件方便維護與管理 2.模塊可以增加代碼的重用率 3.模塊可以當作命名空間如何定義自己的模塊 …

2005年全球H.264編解碼器薈萃

2005年全球H.264編解碼器薈萃videosky.9126.com Peter Lee 2005-0920【摘要】H.264/AVC作為最新的視頻編碼標準&#xff0c;研究領域和產業界都非常看好該標準。尤其是產業界&#xff0c;針對H.264的軟硬件編解碼器可謂是百花齊放、百家爭鳴。本文中&#xff0c;筆者對2005年全…

【Tensorflow】基于卷積神經網絡實現車牌的識別

引言&#xff1a; 過去幾周我一直在涉足深度學習領域&#xff0c;尤其是卷積神經網絡模型。最近&#xff0c;谷歌圍繞街景多位數字識別技術發布了一篇不錯的paper。該文章描述了一個用于提取街景門牌號的單個端到端神經網絡系統。然后&#xff0c;作者闡述了基于同樣的網絡結構…

腳本啟動顯示查詢頻繁被服務器防御_面對CC攻擊,該如何進行防御

網站被攻擊是一件十分讓人惱火的事情&#xff0c;不僅僅是讓網站速度變慢、訪問異常&#xff0c;導致用戶體驗變差&#xff0c;用戶大量流失&#xff0c;而且還會導致網站關鍵詞排名下降甚至被降權&#xff0c;極大干擾了網站的正常穩定運行。那面對CC攻擊&#xff0c;該如何進…