淺談Python魔法方法
特殊方法一覽
在 Python 的學習和使用過程中, 你一定碰到過一些 特殊方法, 它們開頭和結尾都有兩條下劃線, 也叫魔法方法 (Magic method), 或者 Dunder method (double under method).
例如:
>>> dir(int) ['__abs__', '__add__', '__and__', '__bool__', '__ceil__', '__len__', '__delattr__', '__dir__', '__divmod__', '__doc__', '__eq__', '__float__', ...]
* Python 的內置數據類型實現瞭非常多的魔法方法, 可以通過 dir() 進行查看.
初識魔法方法
當我們想從一個數組 nums = [1, 2, 3]
中獲取第一個元素, 我們知道隻需要執行 nums[0]
即可, 為瞭求得 nums[0]
的值, Python 的編譯器實際上會隱式調用 nums.__getitem__(0)
>>> nums = [1, 2, 3] >>> nums[0] 1 >>> nums.__getitem__(0) 1
再例如獲取數組的長度, 我們使用 len(nums)
來獲取, Python 編譯器也是調用瞭特殊方法 nums.__len__()
>>> len(nums) 3 >>> nums.__len__() 3
- 特殊方法的存在是給 Python 編譯器隱式調用的
- 我們自己寫程序的時候不需要調用
- 它從規范上, 不可以自己定義類似 _ _xx_ _ 的方法
魔法方法有什麼作用
運算符重載
在 Python 中 +
可以對兩個 int 類型的數據進行加操作, 也可以對字符串進行拼接, 這都是魔法方法在背後保證瞭整體語言風格的一致性.
魔法方法被大量用在運算符重載方面, 比如 +, -, * , /
的操作. 我們自己可以定義想要的數據結構或者數據類型, 這些自定義的class可以跟 Python 內置的數據類型一樣, 從而可以寫出更具表達力的代碼, 換句話說就是更具有 Pythonic 風格的代碼.
動手實踐
下面我們自定義一個叫工具人
的類, 讓這個類支持加法, 乘法, 大於等於等操作
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): # 將兩個ToolMan的年齡加起來 return self.age + other.age def __mul__(self, other): # 將兩個 ToolMan 的年齡相乘 return self.age * other.age def __ge__(self, other): # 對比連個 ToolMan 的年齡 return self.age >= other.age
我們自定義瞭這樣一個類, 你可以發現類中重寫瞭很多魔法方法, 這些魔法方法可以讓你自定義的類也實現類似 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魔法方法的文章就介紹到這瞭,更多相關Python魔法方法內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!