Лучший способ абстрагироваться от сезона / показать / Эпизодические данные

в Принципе, я написал API www.thetvdb.com в Python. Текущий код можно найти здесь.

Она собирает данные от API, как просили, и для хранения данных, как-то, и сделать его доступным с помощью команды:

print tvdbinstance[1][23]['episodename'] # get the name of episode 23 of season 1

Что это "лучший" способ абстрагирования этих данных в рамках Tvdb() класса?

я изначально используются расширенные Dict (), которая автоматически создается суб-dicts (так что вы могли бы сделать 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, Посмотреть, Сезона и Эпизода. Каждый из них-это очень простой dict, которые я могу легко добавить дополнительные функциональные возможности (search() функцию Show (), например). Каждый имеет __setitem__, __getitem_ и has_key

Это работает, в основном, хорошо, я могу проверить в Шоу, если у него есть, что сезон в self.data dict, если не поднять season_not_found. Проверьте в Сезон(с) если оно имеет этот эпизод и так далее.

проблема сейчас-это представляя себя в качестве dict, но не все функциональные возможности, и потому, что я переопределение _getitem_ и _setitem_ функции, легко случайно рекурсивно вызывать _getitem_ (так что я не уверен, если расширение Dict классе вызовет проблем)

другая небольшая проблема состоит в добавлении данных в dict-это намного больше работы, чем старый Ddict метод (который был self.data[seas_no][ep_no]['attribute'] = 'something'). См. _setItem и _setData. Это не так уж плохо, поскольку в настоящее время только для чтения, только API-интерфейс (поэтому пользователи API должны только получать данные, не добавить), но это вряд ли.. элегантный..

я думаю, что серия-система классов, вероятно, лучший способ, но разве кто-нибудь есть идея получше для хранения данных? И будет расширение ShowContainer/etc классы с Dict вызвать проблемы?

Найдено 5 ответов:

Best way to abstract season/show/episode data

http://stackoverflow.com/questions/5966/best-way-to-abstract-season-show-episode-data

Посмотреть решение →