在上一次的推送《Python 監(jiān)控文件事件變化—以音樂高潮提取為例》中,最后繼承 LoggingEventHandler 類,對 on_created 進(jìn)行修改的時候,我使用了一個詞叫:重載,隨后不久我便意識到犯下了一個錯誤。
我們先來看看重載與重寫的概念:
重載:
重載的條件如下:
1.一個類里面
2.方法名字相同
3.參數(shù)不同
而參數(shù)不同可分為:參數(shù)類型不同,參數(shù)個數(shù)不同。而上一次推送中,對on_created的修改并沒有針對參數(shù),我們只是單純地對函數(shù)內(nèi)容進(jìn)行修改而已。因此只能叫 重寫 。
重寫:
條件如下:
1.參數(shù)列表與原函數(shù)一致。
2.返回類型與原函數(shù)一致。
因此,根據(jù)這個條件,Python中絕大部分的繼承修改只能叫 重寫 ,而不能叫 重載 。
Python其實(shí)不需要重載這個概念。為什么呢?重載主要是針對參數(shù)而言的,一個是改變參數(shù)的類型,一個是改變參數(shù)的個數(shù)。而Python不需要限定參數(shù)類型,又 可以接受可變參數(shù),因此函數(shù)重載就顯得非常雞肋了。
不過我們依然能通過singledispatch
裝飾器來實(shí)現(xiàn)重載,不過官方稱這樣的函數(shù)為泛型函數(shù),官方文檔:
https://docs.python.org/3/library/functools.html#functools.singledispatch
使用方法:
在需要被重載的函數(shù)上加上裝飾器:
然后用register屬性注冊重載后的函數(shù):
效果如下:
>>> fun(42, verbose=True)
Strengthin numbers, eh?42
>>> fun(['spam','spam','eggs','spam'], verbose=True)
Enumeratethis:
0 spam
1 spam
2 eggs
3 spam
看,這樣我們就順利完成了Python里的"重載",盡管大部分時候都不會用到這個功能。
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。
舉報投訴
相關(guān)推薦
的原型(有時甚至是程序的最終界面),然后對其中有特別要求的部分,用更合適的語言改寫,比如3D游戲中的圖形渲染模塊,性能要求特別高,就可以用C/C++重寫,而后封裝為Python可以調(diào)用的擴(kuò)展類庫。需要注意的是在您使用擴(kuò)展類庫時可能需要考慮平臺問題,某些可能不提供跨平臺的實(shí)
發(fā)表于 04-14 10:15
`1.1 覆蓋隱藏重載重載,隱藏(重定義),覆蓋(重寫)—這幾個名詞看著好像很像,不過其實(shí)一樣都不一樣!!1.1.1 重載:(1)概念:在同一個作用域內(nèi);函數(shù)名相同,參數(shù)列表不同(參數(shù)
發(fā)表于 05-11 09:33
首先我們來講講:重載(Overloading) (1) 方法重載是讓類以統(tǒng)一的方式處理不同類型數(shù)據(jù)的一種手段。多個同名函數(shù)同時存在,具有不同的參數(shù)個數(shù)/類型。 重載Overloading是一個類中
發(fā)表于 09-26 17:56
?0次下載
方法重寫 1、重寫只能出現(xiàn)在繼承關(guān)系之中。當(dāng)一個類繼承它的父類方法時,都有機(jī)會重寫該父類的方法。一個特例是父類的方法被標(biāo)識為final。重寫的主要優(yōu)點(diǎn)是能夠定義某個子類型特有的行為
發(fā)表于 09-27 11:40
?0次下載
Python,是一種面向?qū)ο蟮慕忉屝陀嬎銠C(jī)程序設(shè)計語言Python基礎(chǔ)教程本書包括Python程序設(shè)計的方方面面,首先從Python的安裝開始,隨后介紹了
發(fā)表于 11-30 10:33
?2265次閱讀
重載 overloading 1) 方法重載是讓類以統(tǒng)一的方式處理不同類型數(shù)據(jù)的一種手段。多個同名函數(shù)同時存在,具有不同的參數(shù)個數(shù)/類型。重載是一個類中多態(tài)性的一種表現(xiàn)。 2) Java的方法
發(fā)表于 12-08 10:38
?1256次閱讀
Python 是一種解釋型,面向?qū)ο蟮母呒壘幊陶Z言。和別的一些使用標(biāo)點(diǎn)符號的語言不同,Python使用了大量的英語單詞作為關(guān)鍵字,因而具有很好的可讀性。而且跟其他編程語言相比,它有更少的語法結(jié)構(gòu)。本文總結(jié)25個python相關(guān)的
發(fā)表于 12-28 17:57
?6567次閱讀
在C++中我們經(jīng)常會遇見“重載、重定義、重寫”的概念,三個概念名字很像,很容易混淆,今天我們對三者進(jìn)行一個區(qū)分。
發(fā)表于 06-29 11:33
?5542次閱讀
復(fù)數(shù)的概念可以通過自定義類實(shí)現(xiàn);復(fù)數(shù)中的運(yùn)算操作可以通過操作符重載實(shí)現(xiàn);賦值操作符只能通過成員函數(shù)實(shí)現(xiàn);操作符重載的本質(zhì)為函數(shù)定義。
發(fā)表于 12-24 16:26
?565次閱讀
重載連接器是在特殊的環(huán)境下使用的,所以在設(shè)計重載連接器的時候會根據(jù)相應(yīng)的條件進(jìn)行設(shè)計,而且重載連接器應(yīng)用在很多領(lǐng)域,那么重載連接器有哪些優(yōu)勢呢? 下面我們一起來看看吧!
發(fā)表于 06-30 15:53
?1823次閱讀
重載連接器定義及作用_重載連接器接線方法
發(fā)表于 09-19 15:46
?5833次閱讀
python模塊都有個內(nèi)置屬性**name**。
發(fā)表于 02-21 10:33
?653次閱讀
python通過reload重載模塊動態(tài)更新最新代碼。
## 1.1 reload
發(fā)表于 02-21 11:16
?517次閱讀
于各種編程場景,從簡單的數(shù)據(jù)處理到復(fù)雜的數(shù)據(jù)結(jié)構(gòu)和算法。本文將介紹Python列表的基本概念、常用操作以及一些實(shí)際應(yīng)用。
發(fā)表于 04-16 10:42
?1686次閱讀
Java中的重載(Overload)和重寫(Override)是兩個重要的面向?qū)ο缶幊?b class='flag-5'>概念,盡管它們在使用和功能上有所不同,但它們都與方法和多態(tài)性相關(guān)。本文將全面介紹重載和
發(fā)表于 11-17 17:13
?634次閱讀
評論