官术网_书友最值得收藏!

2.2.2 魔術(shù)方法

類可以定義一些特殊方法,稱為魔術(shù)方法(magic method)或雙劃方法(雙下劃線的簡(jiǎn)寫(xiě))。這些方法通常不會(huì)由我們直接調(diào)用,而是由Python在底層使用,我們將在下面的示例中看到。

我們使用過(guò)這種方法:__init__,在實(shí)例化對(duì)象時(shí)使用它作為初始化語(yǔ)句。__init__方法定義了創(chuàng)建類的實(shí)例時(shí)執(zhí)行的代碼。

魔術(shù)方法的一個(gè)著名用法(本書(shū)將會(huì)大量使用)是重載運(yùn)算符。讓我們通過(guò)一個(gè)例子來(lái)看一看。假設(shè)我們創(chuàng)建了一個(gè)表示復(fù)數(shù)的類:

如何在ComplexNum的實(shí)例上實(shí)現(xiàn)加法操作?方法一是添加一個(gè)plus方法:

可以像下面這樣使用:

這是可以的,但是如果能像對(duì)數(shù)字那樣使用+運(yùn)算符,顯然會(huì)更好:

Python包含一個(gè)魔術(shù)方法__add__。如果創(chuàng)建了這個(gè)方法,我們就可以使用+運(yùn)算符,Python將在后臺(tái)調(diào)用__add__方法。因此,如果我們將plus重命名為_(kāi)_add__,就可以使用+運(yùn)算符對(duì)ComplexNum進(jìn)行加法操作了:

我們可以在類中創(chuàng)建更多的魔術(shù)方法,來(lái)執(zhí)行減法、除法、比較等。你可以快速瀏覽一下表4-1,看一看魔術(shù)方法可以實(shí)現(xiàn)的操作。例如,創(chuàng)建__sub__方法后就可以使用-運(yùn)算符簡(jiǎn)單地計(jì)算兩個(gè)復(fù)數(shù)的減法:

現(xiàn)在,我們可以使用-運(yùn)算符:

怎樣才能使用==操作符比較實(shí)例是否相等呢?創(chuàng)建__eq__方法就行:

這樣就可以輕易地比較復(fù)數(shù)大小了:

本書(shū)會(huì)使用很多魔術(shù)方法,它們確實(shí)提高了代碼的可讀性。

現(xiàn)在,讓我們換換話題,學(xué)習(xí)類型提示。

主站蜘蛛池模板: 永春县| 平和县| 清流县| 泌阳县| 阳高县| 富宁县| 吴旗县| 东宁县| 闻喜县| 祁门县| 朝阳县| 景东| 临沧市| 广饶县| 临西县| 游戏| 华阴市| 菏泽市| 新闻| 济源市| 哈巴河县| 承德市| 桂林市| 南充市| 永年县| 株洲县| 清河县| 稷山县| 光泽县| 河源市| 化隆| 普陀区| 宜昌市| 班玛县| 专栏| 东阳市| 新邵县| 工布江达县| 澄城县| 荣昌县| 永登县|