Python基礎11 魔法方法

2021-09-29 07:04:28 字數 3250 閱讀 1760

定義:

魔術方法,指python中所有以」__」(雙下劃線)作為名字開頭和結尾的方法。它們也被稱為「dunders」。我們最常用到的應該就是「init

魔術方法簡介

方法描述

–del–

析構函式,釋放物件時使用

–repr–

列印轉換

–setitem–

按照索引賦值

–getitem–

按照索引取值

–len–

獲取長度

–cmp–

比較運算

–call–

函式呼叫

–add–

加運算–sub–

減運算–mul–

乘運算–truediv–

除運算–mod–

求餘運算

–pow–

指數運算

–and–

按位與運算

–xor–

按位異或運算

–or–

按位或運算

例項1

class vector:

def __init__(self, a, b):

self.a = a

self.b = b

def __str__(self):

return 'vector (%d, %d)' % (self.a, self.b)

def __add__(self,other):

return vector(self.a + other.a, self.b + other.b)

def __and__(self,other):

return vector(self.a & other.a, self.b & other.b)

v1 = vector(2,3)

v2 = vector(4,5)

print (v1 + v2)

print (v1 & v2)

結果:vector (6, 8)

vector (0, 1)

實現了類與類之間的運算.。需要注意的是,兩個類要同型別。

例項2構造自定義容器,在python中,常見的容器型別有: dict, tuple, list, string。

其中tuple, string是不可變容器,dict, list是可變容器。

可變容器和不可變容器的區別在於,不可變容器一旦賦值後,不可對其中的某個元素進行修改。

class person:

def __init__(self,persion_list):

self.persion_list=persion_list

def __setitem__(self,item,value): #賦值

self.persion_list[item]=value

def __getitem__(self, item): #取值

return self.persion_list[item]

def __len__(self): #長度

return len(self.persion_list)

body=person(["xiuwu","adny","maggie"])

print(body[1])

print(body[1])

print(len(body))

結果:adny

3

例項3
classfunctionallist:

def__init__(self, values=none):

if values is none:

self.values =

else:

self.values = values

def__len__(self):

return len(self.values)

def__getitem__(self, key):

return self.values[key]

def__setitem__(self, key, value):

self.values[key] = value

def__delitem__(self, key):

del self.values[key]

def__iter__(self):

return iter(self.values)

def__reversed__(self):

return functionallist(reversed(self.values))

defhead(self): # 獲取第乙個元素

return self.values[0]

deftail(self): # 獲取第乙個元素之後的所有元素

return self.values[1:]

definit(self): # 獲取最後乙個元素之前的所有元素

return self.values[:-1]

deflast(self): # 獲取最後乙個元素

return self.values[-1]

defdrop(self, n): # 獲取所有元素,除了前n個

return self.values[n:]

deftake(self, n): # 獲取前n個元素

return self.values[:n]

python3中的del方法:

**中指向類的有兩個,分別是man1和man2,當刪除man1時,hero()類的引用並沒有完全刪除掉,當把man2也刪除後,指向hero類的指標為0,此時才真正刪除了hero類.可以對比一下兩個**執行的結果.

**2:

class hero:

def __del__(self):

print("英雄已陣亡")

man1 = hero()

man2 = man1

del man1

print("程式執行完畢")

結果:程式執行完畢 #只刪除了乙個類(man1),hero()並沒有真正刪除,故先執行print,等物件生命週期結束(程式結束),自動刪除類的引用,執行del

英雄已陣亡

DW學習 Python基礎11(魔法方法)

2 魔法運算 算數運算 3增量賦值運算子 4一元運算子 6 習題 解釋 當物件呼叫類時,init self 會自動被觸發,python會自動將當前呼叫的空物件傳給self引數。過程 注意 init self 不能返回什麼值,返回的是none。class rec def init self,x,y s...

Python 基礎之魔法方法

構造方法類似於初始化方法,但是構造方法與其他普通的方法的不同之處在於,當乙個物件被建立之後,會立即呼叫構造方法。class servant object definit self self.servant saber fb servant fb.init print fb.servant class...

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

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