python 魔術方法

python 魔術方法

常用魔術方法


魔術方法就是一個類的特殊方法,和普通方法唯一的不同時,普通方法需要調用!而魔術方法由系統自動調用。

1.__init__

初始化魔術方法
觸發時機:初始化對象時觸發(不是實例化觸發,但是和實例化在一個操作中)
p1 = Person()
p1對象 ? 實例化對象p1 ? p1 實例
參數:至少有一個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化為字符串時使用,也可以用于快捷操作

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__

觸發時機:獲取不存在的對象成員時觸發
參數:一個是接收當前對象的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 bool特征:觸發時機:進行小于等于判斷時自動觸發參數:2個參數第一個是self,第二個判斷的第二個對象返回值:返回值可以任意類型,推薦布爾值作用:定義小于等于號的行為:x <= y 調用 x.le(y)

3.__gt__

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

4.__ge__

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

5.__eq__

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

6.__ne__

格式:def __ne__(self):return bool特征:觸發時機:進行不等于判斷時自動觸發參數: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

類型轉換相關魔術方法


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

上下文管理相關魔術方法(with)


__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/456642.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/456642.shtml
英文地址,請注明出處:http://en.pswp.cn/news/456642.shtml

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

相關文章

Storm ack和fail機制再論

之前對這個的理解有些問題&#xff0c;今天用到有仔細梳理了一遍&#xff0c;記錄一下 首先開啟storm tracker機制的前提是&#xff0c; 1. 在spout emit tuple的時候&#xff0c;要加上第3個參數messageid 2. 在配置中acker數目至少為1 3. 在bolt emit的時候&#xff0c;要加…

Storm編程模型總結

目錄前言&#xff1a;1、Storm編程模型2、對應的的WordCount案例總結&#xff1a; 目錄 前言&#xff1a; 對于Storm的編程模型有必要做一個詳細的介紹&#xff08;配合WC案例來介紹&#xff09; 1、Storm編程模型 上圖中組件的解釋&#xff1a; DataSource&#xff1a;外…

13_觀察者模式

【觀察者模式】 也叫作發布/訂閱模式&#xff0c;使用較為頻繁。 定義了對象間一種一對多的依賴關系&#xff0c;當一個對象改變狀態時&#xff0c;則所有依賴于它的對象都會得到通知并被自動更新。 觀察者模式由以下幾個角色組成&#xff1a; * Subject 被觀察者 定義被觀察者…

【python】內建異常類的層次

內建異常類的層次 BaseException-- SystemExit-- KeyboardInterrupt-- GeneratorExit-- Exception-- StopIteration-- StopAsyncIteration-- ArithmeticError| -- FloatingPointError| -- OverflowError| -- ZeroDivisionError-- AssertionError-- AttributeError-- …

《黑客秘笈——滲透測試實用指南》—第2章2.3節 外部或內部的主動式信息收集...

本節書摘來自異步社區《黑客秘笈——滲透測試實用指南》一書中的第2章2.3節 外部或內部的主動式信息收集&#xff0c;作者【美】Peter Kim&#xff08;彼得 基姆&#xff09;,更多章節內容可以訪問云棲社區“異步社區”公眾號查看。 2.3 外部或內部的主動式信息收集黑客秘笈——…

Storm集群的安裝及簡單使用

目錄前言&#xff1a;1、集群部署的基本流程2、Storm常用操作命令&#xff08;了解&#xff09;3、Storm集群的進程及日志熟悉&#xff08;知道對應的日志的位置出了問題知道去哪找原因&#xff09;4、Storm源碼目錄分析&#xff08;重要&#xff09;總結&#xff1a; 目錄 前…

【python】錯誤、異常和文件---復習筆記

錯誤、異常和文件 1. 異常處理 錯誤指的是代碼有語法問題&#xff0c;無法解釋運行&#xff0c;必須改正后才能運行 如果代碼沒有語法問題&#xff0c;可以運行&#xff0c;但會出運行時的錯誤&#xff0c;例如除零錯誤&#xff0c;下標越界等問題&#xff0c;這種在運行期間…

關于使用百度ueditor時的一些問題

本來這些問題直接在百度貼吧里回答不就完事了,可是好死不死的,百度貼吧里老出現 未知錯誤&#xff0c;錯誤號&#xff1a;230274 看來還是算了,自己做一個隨筆記錄一下好了 關于我們獲取里面的內容時,老是會有一個<p>來包著,而且還老是多出來一個<br/> 這邊是這么處…

Storm的通信機制

目錄前言&#xff1a;1、Worker進程間通信原理2、Worker進程間技術(Netty、ZeroMQ)3、Worker 內部通信技術(Disruptor)總結&#xff1a; 目錄 前言&#xff1a; 這篇文章&#xff0c;博客主要介紹下Storm中Worker進程間和進程內部通信的原理和技術。整篇內容僅供了解&#x…

《Windows PowerShell實戰指南(第2版)》——1.4 搭建自己的實驗環境

本節書摘來自異步社區《Windows PowerShell實戰指南&#xff08;第2版&#xff09;》一書中的第1章&#xff0c;第1.4節&#xff0c;作者&#xff1a;【美】Don Jones&#xff08;道瓊斯&#xff09; , Jeffery Hicks&#xff08;杰弗瑞希克斯&#xff09;著&#xff0c;更多章…

已解決]求問not 1 or 0 and 1 or 3 and 4 or 5 and 6 or 7 and 8 and 9為什么不等于0呢???

not 1 or 0 and 1 or 3 and 4 or 5 and 6 or 7 and 8 and 9 ----> (not 1&#xff09;)or (0 and 1) or (3 and 4) or (5 and 6) or (7 and 8 and 9) ----> 0 or 0 or 4 or 6 or 9 ----> 0 or 4 or 6 or 9 ----> 4 or 6 or 9 4

C#外圍工具資源

1、MATH.NET數學庫:可以用于 矩陣計算方程求根插值擬合。。。2、轉載于:https://www.cnblogs.com/liq07lzucn/p/6227443.html

Storm程序的并發機制原理總結

文章目錄目錄前言&#xff1a;1、概念2、配置并行度總結&#xff1a;目錄 前言&#xff1a; 為了在以后的實踐中提高Storm程序執行的效率&#xff0c;我們還是有必要了解下對應的Storm程序的并發機制。&#xff08;哈哈&#xff0c;雖然以博主小菜鳥的水平還沒有接觸到這種提…

《無線網絡:理解和應對互聯網環境下網絡互連所帶來的挑戰》——第2章 無線生態系統 2.1無線標準化過程...

本節書摘來自華章出版社《無線網絡&#xff1a;理解和應對互聯網環境下網絡互連所帶來的挑戰》一書中的第2章&#xff0c;第2.1節&#xff0c;作者&#xff1a;&#xff08;美&#xff09;杰克L.伯班克&#xff08;Jack L. Burbank&#xff09;等著&#xff0c;更多章節內容可以…

Flask模板01

模板 在前面的示例中&#xff0c;視圖函數的主要作用是生成請求的響應&#xff0c;這是最簡單的請求。實際上&#xff0c;視圖函數有兩個作用&#xff1a;處理業務邏輯和返回響應內容。在大型應用中&#xff0c;把業務邏輯和表現內容放在一起&#xff0c;會增加代碼的復雜度和…

★數學上最大的數是多少?

數學上最大的數是多少&#xff1f; 怪羅科普 收藏(282)| 閱讀(117678)人類已經使用數長達千年之久。普遍認為&#xff0c;數的概念最先源于史前人類開始使用手指進行計數。這最終演變成符號語言&#xff0c;然后在沙子、墻壁和木頭等物體上作標記。 我們已經向前發展了一大步&…

Flask模板02

3.4 控制語句 常用的幾種控制語句&#xff1a; 模板中的if控制語句 app.route(/user) def user():user dongGereturn render_template(user.html,useruser)<html><head>{% if user %}<title> hello {{user}} </title>{% else %}<title> welc…

Storm任務提交過程及目錄樹介紹

目錄前言&#xff1a;1、Storm 任務提交的過程2、Storm相關的目錄樹總結&#xff1a; 目錄 前言&#xff1a; 對于任何一個組件來說&#xff0c;了解它相關的任務提交的過程是非常有必要的&#xff08;畢竟生產中遇到一些Bug時&#xff0c;你如果知道內部執行的過程&#xf…

《Adobe InDesign CS6中文版經典教程》—第1課1.5節修改文檔的縮放比例

本節書摘來自異步社區《Adobe InDesign CS6中文版經典教程》一書中的第1課1.5節修改文檔的縮放比例&#xff0c;作者【美】Adobe公司,更多章節內容可以訪問云棲社區“異步社區”公眾號查看。 1.5 修改文檔的縮放比例Adobe InDesign CS6中文版經典教程InDesign中的控件讓用戶能…

隨機生成一定范圍的隨機數

function randomNum(min,max) { return Math.ceil(Math.random()*(max-min)min); } min,max最小最大范圍數字。轉載于:https://www.cnblogs.com/kingzlz/p/6229586.html