基本上,我已经用 Python 为 www.thetvdb.com 编写了一个 API。当前的代码可以在这里找到。
它根据请求从 API 获取数据,并且必须以某种方式存储数据,并通过执行以下操作使其可用:
print tvdbinstance[1][23]['episodename'] # get the name of episode 23 of season 1
在类中抽象这些数据的“最佳”方法是Tvdb()
什么?
我最初使用了一个Dict()
自动创建子字典的扩展(所以你可以做x[1][2][3][4] = "something"
而不必做if x[1].has_key(2): x[1][2] = []
等等)
然后我只是通过做存储数据self.data[show_id][season_number][episode_number][attribute_name] = "something"
这工作正常,但没有简单的方法来检查是否x[3][24]
应该存在(所以我不能提出 season_not_found 异常)。
目前它使用四个类:ShowContainer
、Show
和。每一个都是一个非常基本的字典,我可以很容易地在其中添加额外的功能(例如函数)。每个都有,和。Season
Episode
search()
Show()
__setitem__
__getitem_
has_key
这工作得很好,如果它的self.data
字典中有那个季节,我可以检查 Shows,如果没有,raise season_not_found
. 我也可以检查Season()
它是否有那一集等等。
现在的问题是它把自己呈现为一个字典,但没有所有的功能,而且因为我覆盖了__getitem__
and__setitem__
函数,很容易意外递归调用__getitem__
(所以我不确定扩展Dict
类是否会导致问题)。
另一个小问题是将数据添加到 dict 比旧Dict
方法(原方法self.data[seas_no][ep_no]['attribute'] = 'something'
)要多得多。见_setItem
和_setData
。这还不错,因为它目前只是一个只读的 API 接口(因此 API 的用户应该只检索数据,而不是添加更多数据),但它几乎没有......优雅。
我认为系列类系统可能是最好的方法,但是有没有人有更好的存储数据的想法?并且扩展ShowContainer
/etc 类Dict
会导致问题吗?