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——addclass
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函式呼叫的,一般都是返回乙個值,這個值是以字串...