python 魔法方法

2021-09-25 19:39:40 字數 4372 閱讀 7609

魔法方法具有一定的特徵:

__new__

(cls[,.

..])

class

capstr

(str):

def__new__

(cls,string)

:#修改新類裡的new方法,需傳入乙個引數

string = string.upper(

)return

str.__new__(cls,string)

#用父類裡的new方法進行返回,直接飯後構造後的物件

def

__new__

(self,

*args,

*kwargs)

: ```

return

object

.__new__(cls,

*atgs,

*kwargs)

類的初始化方法:__init__(self,*args)

typeerror: __init__(

) should return

none

例如;

class

rectangle()

:def

__init__

(self,x,y)

: self.x = x

self.y = y

defgetperi

(self)

:return

(self.x + self.y)*2

defgetarea

(self)

:return self.x * self.y

classc(

):def__init__

(self)

:print

("__init__方法被呼叫"

)def

__del__

(self)

:#只有例項化後的物件被清理,__del__內建方法才被執行

print

("__del__方法被呼叫"

)>>

> c0 = c(

)__init__方法被呼叫

>>

> c1 = c0

>>

> c2 = c0

>>

>

del c0

>>

>

del c1

>>

>

del c2 #最後乙個指向物件的變數被刪除,呼叫del方法

__del__方法被呼叫

方法

算數運算子

__ 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)

定義按位或操作的行為: 例如

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(2)

>>

> b = new_int(3)

>>

> a + b-1

>>

> a - b

5

**執行的邏輯是:

首先把物件例項化,即 a , b 是例項化的物件

在進行二目運算子+時,python會現找第乙個物件的__add__方法,把例項化的物件傳入,self = a,other = b傳入後遞迴尋找其父類的方法,最終使用了int.__sub__方法 方法

對應運算子

__ 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)

當左運算元不支援相應的操作時被呼叫

>>

>

class

nint

(int):

def__radd__

(self,other)

:return

int.__sub__(self,other)

>>

> b = nint(2)

>>

>

1+ b

1>>

> b +

13

同樣還有增量運算子:

方法對應運算子

__ 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)

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

等等,python提供了許多魔法方法,通過重寫魔法方法,可以自由靈活地使用這門語言

摘自魚c論壇

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

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

python魔法方法

python魔術方法是特殊方法的暱稱。它是簡單而又強大,為了被python直譯器呼叫而存在的方法。python提供豐富的元物件協議,讓語言的使用者和核心開發者擁有並使用同樣的工具 例子引用 流暢的python 一摞python風格的紙牌 import collections namedtuple用來...

Python 魔法方法

魔法方法總是被雙下劃線包圍,例如 init 魔法方法是物件導向的 python 的一切,如果你不知道魔法方法,說明你還沒能意識到物件導向的 python 的強大。魔法方法的 魔力 體現在它們總能夠在適當的時候被自動呼叫。魔法方法的第乙個引數應為cls 類方法 或者self 例項方法 若 new 沒有...