總結Python常用的魔法方法

2022-09-25 14:45:10 字數 4407 閱讀 7623

運算子

對應的魔法方法

中文注釋

+__ add__(self, other)加法-

__ sub__(self, other)減法*

__ mul__(self, other)乘法/

__ truediv__(self, other)

真除法//

__ floordiv__(self, other)

整數除法

%__ mod__(self, other)

取餘除法

divmod(a, b)

__ divmod__(self, other)

把除數和餘數運算結果結合,divmod(a,b)返回值是乙個元組(a//b, a%b)

**__ pow__(self, other[,modulo])

self的other次方再對modulo取餘

<<

www.cppcns.com __ lshift__(self, other)

按位左移

>>

__ rshift__(self, other)

按位右移

&__ and__(self, other)

按位與操作

^__ xor__(self, other)

按位異或操作(同為0,異為1)

丨__ or__(self, other)

按位或操作(有1則1)––

–>>> type(len)

#普通的bif

>>> type(int)

#工廠函式(類物件),當呼叫它們的時候,其實就是建立了乙個相應的例項物件

>>> type(dir)

>>> type(list)

>>> a = int('123') #建立乙個相應的例項物件a

>>> b = int('345')

>>> a + b #python在兩個物件進行相加操作

468繼承int,並重寫__add__方法

>>> class new_int(int):

def __add__(self,other):

return int.__sub__(self,other)

def __sub__(self,other):

return int.__add__(self,other)

>>> a = new_int(3)

>>> b = new_int(5)

>>> a + b #兩個物件相加,觸發 __add__(self,other)方法

-2>>> a - b

8>>>

例項2:錯誤寫法,會造成無限遞迴

>>> class new_int(int):

def __add__(self,other):

return (self + other)

def __sub__(self,other):

return (self - other)

>>> class new_int(int):

def __add__(self,other):

return (int(self) + int(other)) #將self與other強制轉換為整型,所以不會出現兩個物件相加觸發__add__()方法

def __sub__(self,other):

retur程式設計客棧n (int(self) - int(other))

>>> a = new_int(3)

>>> b = new_int(5)

>>> a + b

8魔法方法

定義__ radd__(self, other)

定義加法的行為:+(當左運算元不支援相應的操作時被呼叫)

__ rsub__(self, other)

定義減法的行為:-(當左運算元不支援相應的操作時被呼叫)

__ rmul__(self, other)

定義乘法的行為:*(當左運算元不支援相應的操作時被呼叫)

__ rtruediv__(self, other)

定義真除法的行為:/(當左運算元不支援相應的操作時被呼叫)

__ rfloordiv__(self, other)

定義整數除法的行為://(當左運算元不支援相應的操作時被呼叫)

__ rmod__(self, other)

定義取模演算法的行為:%(當左運算元不支援相應的操作時被呼叫)

__ rdivmod__(self, other)

定義當被divmod()呼叫時的行為(當左運算元不支援相應的操作時被呼叫)

__ rpow__(self, other)

www.cppcns.com 定義當被power()呼叫或**運算時的行為(當左運算元不支援相應的操作時被呼叫)

__ rlshift__(self, other)

定義按位左移位的行為:<

__ rrshift__(self, other)

定義按位右移位的行為:>>(當左運算元不支援相應的操作時被呼叫)

__ rand__(self, other)

定義按位與操作的行為:&(當左運算元不支援相應的操作時被呼叫)

__ rxor__(self, other)

定義按位異或操作的行為:^(當左運算元不支援相應的操作時被呼叫)

__ ror__(self, other)

定義按位或操作的行為:丨(當左運算元不支援相應的操作時被呼叫)––

>>> class int(int):

def __add__(self,other):

return int.__sub__(self,other)

>>> a = int(3)

>>> b = int(2)

>>> a + b

1反運算與算術運算子的不同之處是,反運算多了乙個'r',例如 __add__()的反運算對應為 __radd__()

>>> a + b

這裡a是加數,b是被加數,如果a物件的__add__()方法沒有實現或者不支援相應的操作,那麼python就會自動呼叫b的__radd__()方法

例項:>>> class nint(int):

def __radd__(self,other):

return int.__sub__(self,other)

>>> a = nint(5)

>>> b = nint(3)

>>> a + b #由於a物件預設有__add__()方法,所以b的__radd__()沒有執行

8例項2:

>>> class nint(int):

def __radd__(self,other):

return int.__sub__(self,other)

>>> b = nint(5)

>>> 3 + b #由於3無__add__()方法,所以執行b的反運算__radd__(self,other)方法,其中self是b物件

2eg:注:在重寫反運算魔法方法時,一定要注意順序問題。得到的應該是個負數,所以順序改變下。

增量賦值運算的魔法方法

魔法方法

定義__ iadd__(self, other)

定義賦值加法的行為:+=

__ isub__(self, other)

定義賦值減法的行為:-=

__ imul__(self, other)

定義賦值乘法的行為:*=

__ itr程式設計客棧uediv__(self, other)

定義賦值真除法的行為:/=

__ ifloordiv__(self, other)

定義賦值整數除法的行為://=

__ imod__(self, other)

定義賦值取模演算法的行為:%=

__ ipow__(self, other)

定義賦值冪運算的行為:**=

__ ilshift__(self, other)

定義賦值按位左移位的行為:<<=

__ irshift__(self, other)

定義賦值按位右移位的行為:>>=

__ iand__(self, other)

定義賦值按位與操作的行為:&=

__ ixor__(self, other)

sbnep 定義賦值按位異或操作的行為:^=

__ ior__(self, other)

定義賦值按位或操作的行為:丨=--

魔法方法

定義__ neg__(self)

定義正號的行為:+x

__ pos__(self)

定義負號的行為:-x

__ abs__(self)

定義當被abs()呼叫時的行為

__ invert__(self)

定義按位求反的行為:~x––

python 魔法方法 python常用魔法方法

in 1 其實 str 相當於是str 方法 而 repr 相當於repr 方法。str是針對於讓人更好理解的字串格式化,而repr是讓機器更好理解的字串格式化。class test def init self,word self.word word def str self return my n...

Python魔法方法 基本的魔法方法

new cls 1.new 是在乙個物件例項化時候所呼叫的第乙個方法 2.他的第乙個引數是這個類,其他的引數是用來直接傳遞給 init 方法 3.new 決定是否使用該 init 方法,因為.new 可以直接呼叫其他類的構造方法,或者返回別的例項物件來作為本類的例項,如果 new 沒有返回例項物件,...

python的魔法 Python 魔法方法

先給個例子 class frenchdeck ranks str n for n in range 2,11 list jqka suits spades diamonds clubs hearts split def init self self.cards card rank,suit for ...