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