- 機(jī)械工程師Python編程:入門(mén)、實(shí)戰(zhàn)與進(jìn)階
- (西)安琪兒·索拉·奧爾巴塞塔
- 521字
- 2024-09-10 16:13:10
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í)類型提示。
- Spring技術(shù)內(nèi)幕:深入解析Spring架構(gòu)與設(shè)計(jì)
- 軟件界面交互設(shè)計(jì)基礎(chǔ)
- JavaScript:Functional Programming for JavaScript Developers
- Flink SQL與DataStream入門(mén)、進(jìn)階與實(shí)戰(zhàn)
- 學(xué)Python也可以這么有趣
- Drupal 8 Module Development
- 深入RabbitMQ
- Python編程實(shí)戰(zhàn)
- 零基礎(chǔ)學(xué)Python網(wǎng)絡(luò)爬蟲(chóng)案例實(shí)戰(zhàn)全流程詳解(入門(mén)與提高篇)
- Java程序設(shè)計(jì)入門(mén)
- 零基礎(chǔ)學(xué)HTML+CSS
- SEO教程:搜索引擎優(yōu)化入門(mén)與進(jìn)階(第3版)
- Java Hibernate Cookbook
- Spring Data JPA從入門(mén)到精通
- Applied Deep Learning with Python