您好,登錄后才能下訂單哦!
小編給大家分享一下Python中魔法方法的示例分析,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!
在 Python 的學(xué)習(xí)和使用過程中, 你一定碰到過一些 特殊方法, 它們開頭和結(jié)尾都有兩條下劃線, 也叫魔法方法 (Magic method), 或者 Dunder method (double under method).
例如:
>>> dir(int) ['__abs__', '__add__', '__and__', '__bool__', '__ceil__', '__len__', '__delattr__', '__dir__', '__divmod__', '__doc__', '__eq__', '__float__', ...]
* Python 的內(nèi)置數(shù)據(jù)類型實(shí)現(xiàn)了非常多的魔法方法, 可以通過 dir() 進(jìn)行查看.
當(dāng)我們想從一個(gè)數(shù)組 nums = [1, 2, 3]
中獲取第一個(gè)元素, 我們知道只需要執(zhí)行 nums[0]
即可, 為了求得 nums[0]
的值, Python 的編譯器實(shí)際上會(huì)隱式調(diào)用 nums.__getitem__(0)
>>> nums = [1, 2, 3] >>> nums[0] 1 >>> nums.__getitem__(0) 1
再例如獲取數(shù)組的長(zhǎng)度, 我們使用 len(nums)
來獲取, Python 編譯器也是調(diào)用了特殊方法 nums.__len__()
>>> len(nums) 3 >>> nums.__len__() 3
特殊方法的存在是給 Python 編譯器隱式調(diào)用的
我們自己寫程序的時(shí)候不需要調(diào)用
它從規(guī)范上, 不可以自己定義類似 _ _xx_ _ 的方法
在 Python 中 +
可以對(duì)兩個(gè) int 類型的數(shù)據(jù)進(jìn)行加操作, 也可以對(duì)字符串進(jìn)行拼接, 這都是魔法方法在背后保證了整體語言風(fēng)格的一致性.
魔法方法被大量用在運(yùn)算符重載方面, 比如 +, -, * , /
的操作. 我們自己可以定義想要的數(shù)據(jù)結(jié)構(gòu)或者數(shù)據(jù)類型, 這些自定義的class可以跟 Python 內(nèi)置的數(shù)據(jù)類型一樣, 從而可以寫出更具表達(dá)力的代碼, 換句話說就是更具有 Pythonic 風(fēng)格的代碼.
下面我們自定義一個(gè)叫工具人
的類, 讓這個(gè)類支持加法, 乘法, 大于等于等操作
class ToolMan(object): def __init__(self, name, age): self.name = name self.age = age def __len__(self): return len(self.name) def __str__(self): return "你好, 打工人!" def __add__(self, other): # 將兩個(gè)ToolMan的年齡加起來 return self.age + other.age def __mul__(self, other): # 將兩個(gè) ToolMan 的年齡相乘 return self.age * other.age def __ge__(self, other): # 對(duì)比連個(gè) ToolMan 的年齡 return self.age >= other.age
我們自定義了這樣一個(gè)類, 你可以發(fā)現(xiàn)類中重寫了很多魔法方法, 這些魔法方法可以讓你自定義的類也實(shí)現(xiàn)類似 interger 的加減乘除, 比較大小等操作!
>>> tool_man1 = ToolMan("打工人1", 20) >>> tool_man2 = ToolMan("打工人2", 25) >>> print(tool_man1) 你好, 打工人! >>> tool_man1 + tool_man2 45 >>> tool_man1 * tool_man2 500 >>> tool_man1 >= tool_man2 False
以上是“Python中魔法方法的示例分析”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。