濮阳杆衣贸易有限公司

主頁 > 知識庫 > 淺談Python魔法方法

淺談Python魔法方法

熱門標(biāo)簽:如何地圖標(biāo)注公司 長春極信防封電銷卡批發(fā) 電銷機(jī)器人錄音要學(xué)習(xí)什么 企業(yè)彩鈴地圖標(biāo)注 外賣地址有什么地圖標(biāo)注 預(yù)覽式外呼系統(tǒng) 銀川電話機(jī)器人電話 煙臺電話外呼營銷系統(tǒng) 上海正規(guī)的外呼系統(tǒng)最新報(bào)價

特殊方法一覽

在 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)我們想從一個數(shù)組 nums = [1, 2, 3] 中獲取第一個元素, 我們知道只需要執(zhí)行 nums[0] 即可, 為了求得 nums[0] 的值, Python 的編譯器實(shí)際上會隱式調(diào)用 nums.__getitem__(0)

>>> nums = [1, 2, 3]
>>> nums[0]
1
>>> nums.__getitem__(0)
1

再例如獲取數(shù)組的長度, 我們使用 len(nums) 來獲取, Python 編譯器也是調(diào)用了特殊方法 nums.__len__()

>>> len(nums)
3
>>> nums.__len__()
3
  • 特殊方法的存在是給 Python 編譯器隱式調(diào)用的
  • 我們自己寫程序的時候不需要調(diào)用
  • 它從規(guī)范上, 不可以自己定義類似 _ _xx_ _ 的方法

魔法方法有什么作用

運(yùn)算符重載

在 Python 中 + 可以對兩個 int 類型的數(shù)據(jù)進(jìn)行加操作, 也可以對字符串進(jìn)行拼接, 這都是魔法方法在背后保證了整體語言風(fēng)格的一致性.

魔法方法被大量用在運(yùn)算符重載方面, 比如 +, -, * , /的操作. 我們自己可以定義想要的數(shù)據(jù)結(jié)構(gòu)或者數(shù)據(jù)類型, 這些自定義的class可以跟 Python 內(nèi)置的數(shù)據(jù)類型一樣, 從而可以寫出更具表達(dá)力的代碼, 換句話說就是更具有 Pythonic 風(fēng)格的代碼.

動手實(shí)踐

下面我們自定義一個叫工具人的類, 讓這個類支持加法, 乘法, 大于等于等操作

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

我們自定義了這樣一個類, 你可以發(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

是不是還挺有意思的, 自己動手玩一玩吧~

到此這篇關(guān)于淺談Python魔法方法的文章就介紹到這了,更多相關(guān)Python魔法方法內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:
  • Python面向?qū)ο竽Хǚ椒ê蛦卫K代碼實(shí)例
  • Python魔法方法 容器部方法詳解
  • Python魔法方法功能與用法簡介
  • python魔法方法-屬性轉(zhuǎn)換和類的表示詳解
  • Python中的魔法方法深入理解

標(biāo)簽:潮州 湖北 西寧 盤錦 宜昌 佳木斯 珠海 上饒

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《淺談Python魔法方法》,本文關(guān)鍵詞  淺談,Python,魔法,方法,淺談,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《淺談Python魔法方法》相關(guān)的同類信息!
  • 本頁收集關(guān)于淺談Python魔法方法的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    莱芜市| 文登市| 通许县| 宁阳县| 浏阳市| 正安县| 岳西县| 报价| 三亚市| 九龙县| 明溪县| 崇信县| 高密市| 新和县| 辰溪县| 堆龙德庆县| 枣庄市| 瑞安市| 彝良县| 金乡县| 辰溪县| 新巴尔虎左旗| 犍为县| 昂仁县| 曲松县| 陆河县| 广德县| 定安县| 工布江达县| 吉林市| 儋州市| 莱西市| 营山县| 怀集县| 云安县| 德州市| 竹北市| 天长市| 闽清县| 旬邑县| 清原|