在python中,我們時常會用到物件,而物件又包含許多方法,尤其是一些內建的方法都以"__"雙下劃線開頭和結束,而這些方法在python中都被統稱為magic method,即魔術方法。
在魔術方法中比較常見和多用的乙個方法就是__init__,它可以根據類的定義以及傳入的引數對之後例項化的物件進行初始化。所以使用魔術方法最大的優勢可以自定義的使用python內建方法去達到某些功能。
舉幾個魔術方法使用例子:
_str_(self)
_str_(self)方法是用於處理列印例項物件本身的輸出內容。可以看到,如果我們沒有定義該方法直接使用print()方法輸出時,輸出的是物件的記憶體位址資訊。
class
teacher
:def
__init__
(self, name)
: self.name = name
teacher1 = teacher(
'anders'
)print
(teacher1)
# 輸出如下:
# <__main__.teacher object at 0x1083cf6a0>
下面的例子中我們定義了_str_ 方法,因為前面提到 __str__方法是處理列印例項本身的輸出內容,所以這裡直接在__str__方法中輸出要想要輸出的內容。
class
teacher
:def
__init__
(self, name)
: self.name = name
def__str__
(self)
:return
"i am a teacher, my name is "
.format
(self.name)
teacher1 = teacher(
'anders'
)print
(teacher1)
# 輸出如下:
# i am a teacher, my name is anders
_eq_(self, other)
_eq_(self, other)方法是乙個用於比較型別的魔術方法,這裡用於比較是否相等的性質行為,除此以外還有 __ne__(self, other),__lt__(self, other),__gt__(self, other),__le__(self, other),__ge__(self, other)方法。
class
word
:def
__init__
(self, text)
: self.text = text
def__eq__
(self, other)
:return self.text.lower(
)== other.text.lower(
)
first = word(
'anders'
)second = word(
'anders'
)first == second
# 輸出如下:
# true
_truediv_(self, other)
_truediv_(self, other)方法是乙個和數學相關的魔術方法,
我們都知道我們可以把字串直接乘以指定的數字,以此快捷方式得到對應所乘數倍數的字串值。
"abc"*5
# 輸出如下:
# 'abcabcabcabcabc'
但是如果你把乙個字串去除以指定的倍數那可是會直接報錯的。
'abcabcabcabcabc'/5
# 輸出如下:
# typeerror: unsupported operand type(s) for /: 'str' and 'int'
但現在有了魔術方法,我們就可以自定義自己的除法方法讓表示式變的就像使用python自帶方法那樣的功能。
class
word()
:def
__init__
(self, text)
: self.text = text
def__truediv__
(self, other)
:# 通過len()方法計算傳入的物件字串總長度,然後除以指定的整數,如果能整除才開始下一步判斷,否則輸出none
iflen
(self.text)
% other ==0:
# 計算可以被分成多少組
group =
int(
len(self.text)
/ other)
start =
0 end = other
l =# 可以被分成多少組就迴圈多少次
for i in
range
(group)
:# 用切片方式每次取開頭到結束位置
)# 之後的開始位置就是上一次的結束位置
start = end
# 結束位置就等於開始的位置加上指定除以的整數(也就是要整除分組的每組數量值)
end = start + other
return l
else
:return
"none"
def__str__
(self)
:return self.text
def__repr__
(self)
:return self.text
str1 = word(
'abcabcabcabcabc'
)str1 /
3# 輸出如下:
# ['abc', 'abc', 'abc', 'abc', 'abc']
str1 /
4# 輸出如下:
# 'none'
最後要說的是,python的魔術方法非常多,有用於表的魔術方法,有用於普通算數操作的魔術方法,有型別轉換的魔術方法等等,這裡就不一一例舉,在明白了魔術方法的意義和用法後,需要的時候直接去查詢魔術列表然後檢視具體使用方法和傳參就可以做到舉一反三了。 python 魔術方法
魔術方法 呼叫方式 解釋 new cls instance myclass arg1,arg2 new 在建立例項的時候被呼叫 init self instance myclass arg1,arg2 init 在建立例項的時候被呼叫 cmp self,other self other,self o...
Python魔術方法
參考文章 python 魔術方法指南 魔術方法,顧名思義是一種可以給物件 類 增加魔法的特殊方法,它們的表示方法一般是用雙下劃線包圍 如 init from os.path import join class fileobject 給檔案物件進行包裝從而確認在刪除時檔案流關閉 def init se...
Python 魔術方法
usr bin env python coding utf 8 author ray time 2018 12 6 魔術方法例項 init 建構函式,在生成物件時呼叫,用來初始化值 del 析構函式,釋放物件時使用 比如編輯檔案,把關閉檔案的操作寫在此方法中,程式結束時就會關閉軟體 str 使用pr...