我有一个名为 Video 的 Python 类,它代表 YouTube 视频。给定 YouTube 视频的 ID,Video 返回代表该视频的对象。但是,首次创建 Video 对象时,不会查询 YouTube。仅当要求提供需要 YouTube 信息的属性时才会查询 YouTube。其工作原理如下:
>>> from video import Video
>>> video = Video('B11msns6wPU')
# 'B11msns6wPU' is the ID of a video
>>> video
Video(youtube_id="B11msns6wPU")
### As of now, no call to YouTube's API has been made
### Next, I ask for the title attribute. The object queries YouTube's API to get
### this information. In doing so, the object is completely initialized
>>> video.title
u'Badly Drawn Boy - Disillusion (directed by Garth Jennings)'
>>> video.duration
u'275'
# no query was made to the API because the object has been already been initialized
我不确定这在技术上是否是“惰性评估”,但它的味道是相似的。在第一次调用属性之前,视频对象不会被初始化。我想知道这项技术是否值得实现。显然,这使我的代码变得更加复杂。你有什么想法?
最佳答案
这是一种一般性的判断,而不是一个硬性的决定。
如果惰性对象(Video
类实例)是您的应用程序的核心,那么在执行其他操作之前完全初始化它可能是有意义的;如果您的应用没有数据就毫无用处,请先获取数据。
但是,如果您的应用可能有数百或数千个这样的 Video
实例,并且其中大多数都不会被使用,那么在您初始化所有这些实例时让用户等待是没有意义的。在这种情况下,将初始化推迟到真正需要的时候是很有意义的。例如,如果您将显示“缩略图墙”显示,您可能需要每个视频和标题的缩略图,但除非用户单击缩略图,否则您可能不需要其他任何内容。
我确实喜欢一般方法,即使用该对象的代码不需要知道或关心该对象是否已预先初始化。
关于python - 这是否是惰性评估的合理用例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11003370/