cpython: когда вызывается PyDict_GetItem и когда dict_subscript?

1

Я читаю cpython code для python 3k, и я заметил, что __missing__ вызывается только при вызове dict_subscript, но не при использовании PyDict_GetItem. В чем разница между этими двумя методами и когда каждый называется? Если я передаю PyObject, который является подклассом dict и имеет метод __missing__, как я могу заставить его использовать, так как PyDict_GetItem не делает этого.

Теги:
dictionary
cpython

1 ответ

1
Лучший ответ

Наблюдения, догадки и т.д.:

То же самое происходит в Python 2.x.

dict_subscript реализует эквивалент метода high_level dict.__getitem__ и поэтому будет вызываться всякий раз, когда adict[somekey] появляется иначе, чем на LHS присваивания в коде Python.

PyDict_GetItem является частью C API. Возможно, это недосмотр, что он не обновлен.

Прочитав ужасные комментарии в начале PyDict_GetItem, я бы использовал PyDict_GetItemWithError вместо: -)

Возможно, вы можете выполнить эквивалент уровня my_getitem = getattr(my_dict, '__getitem__') на уровне C один раз, затем вызвать это.

Возможно, вы могли бы поднять билет с ошибкой или спросить на comp.lang.python

Ещё вопросы

Сообщество Overcoder
Наверх
Меню