python 魔法函式

2021-10-17 08:32:07 字數 2029 閱讀 8101

python中以__開頭,以__結尾的函式就是魔法函式,類中的魔法函式是為了增強類的特性。魔法函式不能自定義。同時魔法函式定義之後不需要呼叫,直譯器會自動進行呼叫。

class

company

(object):

def__init__

(self,employee_list)

: self.employee = employee_list

def__getitem__

(self,item)

:# 定義這個可以進行迭代

return self.employee[item]

company = company(

["tom"

,"bob"

,"jane"])

for em in company[:2

]:# 可進行切片

print

(em)

# tom bob

class

company

(object):

def__init__

(self,employee_list)

: self.employee = employee_list

def__len__

(self)

:# 定義了getitem也可以實現len操作

return

len(self.employee)

舉例1——abs

注意:自定製__abs__也影響了abs()內建方法。

class

nums

(object):

def__init__

(self,num)

: self.num = num

def__abs__

(self)

:return

abs(self.num)

my_num = nums(1)

abs(my_num)

# 1

舉例2——add
class

myvector

(object):

def__init__

(self,x,y)

: self.x = x

self.y = y

def__add__

(self,other_instance)

:return myvector(self.x+other_instace.x,self.y+other_instace.y)

def__str

(self)

:return

"x:,y:"

.format

(x=self.x,y=self.y)

first_vec = myvector(1,

2)second_vec = myvector(2,

3)print

(first_vec+second_vec)

# x:3,y:5

說明:數**算類似於c++的運算子過載。

如果len()方法呼叫的物件是python內建的型別,如list,set,dict(cpython)等,會直接獲取(有乙個資料表示長度),而不需要去遍歷,效率更高。

class

company

(object):

def__init__

(self,employee_list)

: self.employee = employee_list

def__len__

(self)

:return

len(self.employee)

company = company(

["tom"

,"bob"

,"jane"])

len(company)

# 3

python魔法函式

python中魔法函式簡單上來說就是在構建某個類的時候,給類定義一些初始的方法,來實現類物件的某些屬性或者方法而準備。其形式如下,下雙劃線開頭雙劃線結尾 初始化乙個學生class class student def init self,students list self.students list...

python魔術函式 Python 魔法函式

getattr 魔法函式 getattr 魔法函式是在你試圖訪問乙個不存在的屬性時呼叫的。如果沒有這個魔法函式,訪問不存在的屬性程式會報錯。from datetime import date class user def init self,name,birthday self.name name ...

python的魔法函式

所以還是老老實實的把自己的基本功練好,物件導向玩的爐火純青,其他的不過是稍加訓練,跟賣藝的學幾招也能稱霸一片天。哈哈 牛吹的太過了,還是回到正題,總結分享一下一些稍微不太熟悉的魔法方法。一 str 它表示的是直接列印物件實現的方法,str 是被print函式呼叫的,一般都是返回乙個值,這個值是以字串...