基本的に、私は 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
の4 つのクラスを使用していEpisode
ます。それぞれが非常に基本的な辞書であり、追加機能を簡単に追加できます (たとえば、search()
関数 on )。Show()
それぞれに__setitem__
、__getitem_
およびがありhas_key
ます。
これはほとんど問題なく動作します。そのシーズンがself.data
ディクテーションに含まれているかどうかをショーで確認できます。そうでない場合は、raise season_not_found
. Season()
そのエピソードなどがあるかどうかもチェックできます。
現在の問題は、辞書として提示されていますが、すべての機能を備えているわけではありません.and関数をオーバーライドしているため、__getitem__
誤っ__setitem__
て再帰的に呼び出すのは簡単です(したがって、クラスを__getitem__
拡張すると問題が発生するかどうかはわかりません) Dict
)。
もう1つの小さな問題は、dictにデータを追加することは、古いDict
方法(self.data[seas_no][ep_no]['attribute'] = 'something'
. _setItem
およびを参照してください_setData
。現在のところ読み取り専用の API インターフェースにすぎないため (したがって、API のユーザーはデータを取得するだけで、それ以上追加する必要はありません)、それほど悪くはありませんが、ほとんど... エレガントではありません。
一連のクラスシステムがおそらく最良の方法だと思いますが、データを保存するためのより良いアイデアを持っている人はいますか? ShowContainer
また、 /etc クラスを拡張するDict
と問題が発生しますか?