這篇文章給大家介紹python中魔術方法有哪些,內容非常詳細,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。
| 基本方法 | |
|---|---|
| __new__(cls,*args,kwargs) | 創建實例首先調用的類方法,cls指代本類。注意*args和kwargs的寫法,如果不這樣寫會造成__init__方法會接收不到參數 |
| __init__(self[,…]) | 構造器,創建實例的方法 |
| __del__(self) | 析構器,銷毀實例的方法 |
| __call__(self[,args…]) | 允許實例像函數一樣被調用,即運行“實例()”時實質是調用實例的__call__方法 |
| __len__(self) | 定義當被len()調用時的方法 |
| __repr__(self) | 定義當被repr()調用時的方法 |
| __str__(self) | 定義當被str()調用時的方法 |
| __bytes__(self) | 定義當被bytes()調用時的方法 |
| __hash__(self) | 定義當被hash()調用時的方法 |
| __bool__(self) | 定義當被bool()調用時的方法,必須返回True或False |
| __format__(self,format_spec) | 定義當被format()調用時的方法 |
| 屬性方法 | |
| __getattr__(self,name) | 定義訪問不存在的屬性時的方法 |
| __getattribute__(self,name) | 定義訪問指定屬性時的方法 |
| __setattr__(self,name,value) | 定義修改指定屬性時的方法 |
| __delattr__(self,name) | 定義刪除指定屬性時的方法 |
| __dir__(self) | 定義被dir()調用時的方法 |
| __get__(self,instance,owner) | 定義當描述符的值被取得時的方法 |
| __set__(self,instance,value) | 定義當描述符的值被改變時的方法 |
| __delete__(self,instance) | 定義當描述符的值被刪除時的方法 |
| 比較操作符 | |
| __lt__(self,other) | 定義小于號的方法:x<y調用x.__lt__(y) |
| __le__(self,other) | 定義小于等于號的方法:x<=y調用x.__le__(y) |
| __eq__(self,other) | 定義等于號的方法:x==y調用x.__eq__(y) |
| __ne__(self,other) | 定義不等號的方法:x!=y調用x.__ne__(y) |
| __gt__(self,other) | 定義大于號的方法:x>y調用x.__gt__(y) |
| __ge__(self,other) | 定義大于等于號的方法:x>=y調用x.__ge__(y) |
| 算數運算符 | |
| __add__(self,other) | 定義加法的方法:+。例如x+y,實質是找x的__add__方法;如果找到則執行x.__add__(y);如果x沒有__add__方法,則會找y的__radd__方法;如果y也沒有__radd__方法則會報錯。 |
| __sub__(self,other) | 定義減法的方法:- |
| __mul__(self,other) | 定義乘法的方法:* |
| __truediv__(self,other) | 定義真除法的方法:/,這個函數只有使用from__future__importdivision時才有作用。 |
| __div__(self,other) | 定義除法的方法:/ |
| __floordiv__(self,other) | 定義除法取整的方法:// |
| __mod__(self,other) | 定義除法取余的方法:% |
| __divmod__(self,other) | 定義被divmod()調用時的方法。divmod就是除法,返回的值是元組,元組有2項內容,第一項是除法取整的結果,第二項是除法取余的結果。 |
| __pow__(self,other[,modulo]) | 定義當被power()調用或**運算時的方法 |
| __lshift__(self,other) | 定義按位左移位的方法:<< |
| __rshift__(self,other) | 定義按位右移位的方法:>> |
| __and__(self,other) | 定義按位與操作的方法:& |
| __xor__(self,other) | 定義按位異或操作的方法:^ |
| __or__(self,other) | 定義按位或操作的方法:| |
| 右算術運算符 | |
| __radd__(self,other) | 與上方算術運算符相同,當左操作數不能調用算術運算符時右操作數會調用的方法,例如:x+y,當x沒有__add__方法時,會嘗試調用y的__radd__方法,即執行y.__radd__(y),如果y也沒有__radd__則報錯。 |
| __rsub__(self,other) | 同上 |
| __rmul__(self,other) | 同上 |
| __rtruediv__(self,other)同上 | 同上 |
| __rdiv__(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.如果你定義了一個可能在切片時用到的定制的數值型,你應該定義__index__3.如果__index__被定義,則__int__也需要被定義,且返回相同的值 |
| 上下文管理(with語句) | |
| __enter__(self) | 1.定義當使用with語句時的初始化行為2.__enter__的返回值被with語句的目標或者as后的名字綁定 |
| __exit__(self,exc_type,exc_value,traceback) | 1.定義當一個代碼塊被執行或者終止后上下文管理器應該做什么2.一般被用來處理異常,清除工作或者做一些代碼塊執行完畢之后的日常工作 |
| 容器類型 | |
| __len__(self) | 定義當被len()調用時的方法(返回容器中元素的個數) |
| __getitem__(self,key) | 定義獲取容器中指定元素的方法,相當于self[key] |
| __setitem__(self,key,value) | 定義設置容器中指定元素的方法,相當于self[key]=value |
| __delitem__(self,key) | 定義刪除容器中指定元素的方法,相當于delself[key] |
| __iter__(self) | 定義當迭代容器中的元素的方法 |
| __reversed__(self) | 定義當被reversed()調用時的方法 |
| __contains__(self,item) | 定義當使用成員測試運算符(in或notin)時的方法 |
魔術方法之前已經寫了兩篇文章了,這是最后一篇。難點基本都講過了,剩下的魔術方法多數是各種運算符,下面寫一個關于運算符重載的簡單案例
這里寫一個關于運算符重載的小案例。
有個士兵對戰的游戲,藍軍是特種兵(攻擊力30,血量99),紅軍是老兵(攻擊力20,血量80)。
藍軍和紅軍打肯定是藍軍贏對吧?別急,現在紅軍領導也想到了,于是給紅軍老兵配了個護士(攻擊力18,血量80),護士攻擊力比較低,但她可以給老兵治療。
class Soldier:def __init__(self, name, attack, health):self.name = name
self.attack = attack
self.health = healthdef __add__(self, other):other.health += self.attackdef __sub__(self, other):other.health -= self.attack
blue = Soldier('藍兵', 30, 99)red = Soldier('紅兵', 20, 80)red_nurse = Soldier('紅護', 18, 80)while blue.health > 0 and red.health > 0:red - blue
blue - red
red_nurse + redprint(f"紅軍老兵還剩下{red.health}點血量!")print(f"藍軍特種兵血量是{blue.health},已被擊斃!")out:紅軍老兵還剩下20點血量!
藍軍特種兵血量是-1,已被擊斃!關于python中魔術方法有哪些就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。