python 魔法方法(1)

2021-10-05 20:42:44 字數 2636 閱讀 4485

魔法方法被雙下劃線__包圍

__init__(self[,........]):返回值是none,不能有其他返回值

class rectangle:

def __init__(self,x,y):

self.x=x

self.y=y

def getperi(self):

return (self.x+self.y)*2

def getarea(self):

return self.x*self.y

rect=rectangle(3,4)

rect.getperi()

rect.getarea()

__new__(cls[,........]):例項化物件的第乙個方法,第乙個引數時類,而不是self

class capstr(str):

def __new__(cls,string):

string=string.upper()

return str.__new__(cls,string)

a=capstring('abc')

__del__(self):析構方法,物件銷毀時呼叫

class c:

def __init__(self):

print('init方法被呼叫')

def __del__(self):

print('del方法被呼叫')

c1=c()     :例項化

c2=c1     增加變數指向出

c3=c2

del c3

del c2

del c1      :只有在這一步才會呼叫__del__方法。

這段**要好好體會

工廠函式:

型別與類一樣,可以用type函式檢視

a=int('123')   :呼叫類例項化方法

b=int('456')

a+b        :物件可以運算

python可以對以下魔法方法進行重定義:

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

b=new_int(5)

a+b            這時發現結果是-2

觀察一下程式:有錯誤麼?

發現出錯,發生無限遞迴。想一想,為什麼?

該怎麼改?

原因:通過int,把self 、other轉為int,而不是try_int,就不會發生自己呼叫自己了,避免了無限遞迴。

反運算:

觀察上例:

a+b    正常,因為a例項變數自動繼承了int的加法定義

1+b    也正常,因為1是常量,沒有繼承int型別,所以此時觸發b物件的反運算方法__radd__(),其實是在做減法

再舉個例子:

說明:呼叫時self引用的是a,other是3        哈哈哈,意外吧

重寫反運算,注意self的順序

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

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

python 魔法方法

魔法方法具有一定的特徵 new cls class capstr str def new cls,string 修改新類裡的new方法,需傳入乙個引數 string string.upper return str.new cls,string 用父類裡的new方法進行返回,直接飯後構造後的物件def...

python魔法方法

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