Артём Иннокентьев: чтобы все более менее работало надо еще переопределить методы CustomDict.__setitem__, CustomDict.get, добавить проверку строковый ключ или нет, если нет, то возвращать просто super().__getitem(key), но это подход чреват различными трудноотлавливаемыми ошибками, так что лучше вообще не трогать словарь, а написать внешний метод:
ну вы бы хоть написали, что вы собираетесь делать: вытягивать данные из файлов или просто заливать их в базу, а то в заголовке "как хранить xml в бд?", а в описании вы все-таки собираетесь хранить данные из xml. а еще можно пример файла выложить.
Алексей Черемисин: хм, твистед честно говоря какая-то странная штука, он сложный, у него асинхронное апи(т.е. надо писать асинхронный код с йилдами и асинк_коллбеками), чтобы понять концепции деферредов и реактора, нужно приложить немало усилий, а еще он показался очень медленным, хотя мы могли его неправильно готовить.
то ли дело гевент, код выглядит синхронным, все элементарно, немного раздражает манки-патчинг, но так немного, только это все для второго питона, а автору надо для нового проекта посоветовать третий(давно уже пора), а там асинхронность из коробки есть. правда я ее совсем не щупал пока.
не наезжаю, просто не пойму фишки твистеда, может просветите.
Denis: ваше решение мягко говоря не очень, вместо того, чтобы получать продукт по ключу из словаря, вы каждый раз перебираете список, конструируете новый, чтобы потом взять из него первый элемент.
Из вопроса сложно понять, с чем конкретно у вас проблемы: определить является класс подклассом суперкласса или как узнать имя класса или как что-то отправить на стандартный вывод. Конкретизируйте, пожалуйста.
thenno: тут, кстати, не совсем понятно по поводу нового экземпляра. я тоже не люблю, когда в сишном стиле в функцию передаются неявно изменяемые аргументы, но тут либо делать deepcopy, чего я ни разу не наблюдал на практике, либо на уровне конвенции - передавать, изменять и явно возвращать, что тоже как-то странно. вот я и не могу прийти к компромиссу.
Собственно вот. Монструозно как-то получилось, но я не такой уж спец по ООП, да и для такого маленького проекта наверное не стоит заморачиваться с классами. Есть кое-какие недоработки, например: для предметов стоило выделить отдельную абстракцию, а не просто строки, сложно организовать многоуровневые диалоги, но мне уже поднадоело, так что выкладываю как есть.