您好,登錄后才能下訂單哦!
小編給大家分享一下python3類比函數(shù)好用嗎,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!
假設(shè)我們需要編寫一個音樂播放器。在這個播放器中,我們有關(guān)于不同類型數(shù)據(jù)的信息,如歌曲、專輯、藝術(shù)家和播放列表。還有一些可以播放歌曲、播放專輯、播放藝術(shù)家或播放播放列表的功能。我們將每種數(shù)據(jù)存儲在字典中,不同類型的數(shù)據(jù)有不同的字段名,因為每個play函數(shù)需要做不同的事情,所以我們就有四個不同的函數(shù):
some_song = { "title": "Yellow Submarine", "artist": the_beatles, # 指向到包含該藝術(shù)家的詞典 "album": yellow_submarine_album, # 指向包含此相冊的dict的鏈接 "duration": insert_time_object_here, "filepath": "path/to/file/on/disk" } # 其他數(shù)據(jù)類型的結(jié)構(gòu)也類似 # 一些函數(shù) def play_song(song): # 獲取歌的路徑 path = song["filepath"] # 播放路徑 call_some_library_function(path) def play_album(album): # 找到專輯里所有的歌曲 # 分別調(diào)用play_song def play_artist(artist): # 找到這位藝術(shù)家所有的專輯 # 分別調(diào)用play_album def play_playlist(playlist): # 找到播放列表中的所有歌曲 # 分別調(diào)用play_song
這樣寫有什么不好?我們有四個非常相似的函數(shù),每個函數(shù)都與特定類型的數(shù)據(jù)相關(guān)。你必須把它們叫做不同的東西,而不僅僅是play,你必須確保你把正確的數(shù)據(jù)傳遞給它們。雖然這四種不同的類型都可以“播放”,但是沒有一種通用的方法可以在不知道它是什么的情況下播放任何東西。那么在OOP下,怎么實現(xiàn)呢:
class Song: def __init__(self, title, artist, album, duration, filepath): self.title = title self.artist = artist self.album = album self.duration = duration self.filepath = filepath def play(self): path = self.filepath call_some_library_function(path)
這樣就定義了如何創(chuàng)建一個新的Song對象。該方法將字段值作為參數(shù),并將它們作為對象的屬性賦值。self是一個特殊參數(shù)(名稱不保留;它可以被稱為任何東西),它是對對象本身的引用。是一種從同一對象的其他方法內(nèi)部訪問屬性和方法的方法。當(dāng)我們從對象外部訪問它們時(要使用play方法時將執(zhí)行此操作),則可以使用在該范圍內(nèi)為對象指定的任何名稱。
那么在之前:
# some_song是上面定義的歌 play_song(some_song) 在使用class之后: # self參數(shù)沒有在這里傳遞;它會自動添加 some_song = Song("Yellow Submarine", the_beatles, yellow_submarine_album, insert_time_object_here, "path/to/file/on/disk" ) some_song.play()
為什么這樣更好?如果我們有一個對象,則不必知道它是什么就可以播放,因為現(xiàn)在播放任何內(nèi)容的語法都是相同的:anyobject.play()即對象“知道”如何使用“自己的”數(shù)據(jù)進行處理的設(shè)計思想。無需從外部檢查對象是否具有某些字段并決定如何處理這些內(nèi)部字段,而是調(diào)用play對象提供的方法,并在每個類內(nèi)部定義該類型的對象應(yīng)如何實現(xiàn)此功能。
以上是python3類比函數(shù)好用嗎的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對大家有所幫助,如果還想學(xué)習(xí)更多知識,歡迎關(guān)注億速云行業(yè)資訊頻道!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。