python3类比函数好用吗
小编给大家分享一下python3类比函数好用吗,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!
成都创新互联长期为数千家客户提供的网站建设服务,团队从业经验10年,关注不同地域、不同群体,并针对不同对象提供差异化的产品和服务;打造开放共赢平台,与合作伙伴共同营造健康的互联网生态环境。为吉阳企业提供专业的做网站、成都网站建设,吉阳网站改版等技术服务。拥有10多年丰富建站经验和众多成功案例,为您定制开发。
假设我们需要编写一个音乐播放器。在这个播放器中,我们有关于不同类型数据的信息,如歌曲、专辑、艺术家和播放列表。还有一些可以播放歌曲、播放专辑、播放艺术家或播放播放列表的功能。我们将每种数据存储在字典中,不同类型的数据有不同的字段名,因为每个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类比函数好用吗的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注创新互联行业资讯频道!
网站题目:python3类比函数好用吗
分享路径:http://azwzsj.com/article/jsscih.html