魔法方法具有一定的特徵:
__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 沒有...