У меня есть пользовательская реализация dict, которая переопределяет и по большому счету поддерживается родным Python dict. Однако при настройке он выполняет некоторую предварительную обработку значения и сохраняет его в каком-то собственном объекте. При получении этот проприетарный объект затем преобразуется в более естественный формат.Обновление Python Dict от пользовательского Dict
Все функции, вызываемые из этого пользовательского dict, ведут себя так, как мне нравится.
Проблема заключается в том, что когда вы вызываете что-то вроде {'a': 1} .update (custom_dict ({'b': 2})), значение для 'b' в обновленном dict является собственностью внутреннего хранилища объект, а не обработанное значение.
Как работает обновление для коренного языка Python. Я переопределил все методы, которые я мог придумать, используя items
, iteritems
, values
, itervalues
, get
и __getitem__
, но я, похоже, не прибил ни одно из обновлений, которое пытается получить доступ, что заставляет меня поверить может использовать код c. Мысли?
--Update--
Я только что нашел это в исходном коде Python:
if (PyDict_Check(b)) {
...
}
else {
/* Do it the generic, slower way */
...
}
Возможно, это ошибка, и что должно быть PyDict_CheckExact(b)
как показывает в различных других местах в код.
Любая идея, как победить эту проверку?
Наследовать ли вы от 'dict'? Может быть, это не поможет. Похоже, вы все равно не используете много функциональности 'dict'. – 9000
Да, я унаследовал от dict. В основном все методы, которые я переопределил, явно вызывают методы dict .__ после некоторой обработки. Я полагал, что альтернатива иметь вспомогательный dict и использование абстрактного базового класса будет хуже ... –