基本的に、私は 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と問題が発生しますか?