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

StackOverflow https://stackoverflow.com/questions/2470928

  •  20-09-2019
  •  | 
  •  

Вопрос

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

Это было полезно?

Решение

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

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

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

PyDict_GetItem является частью C API.Возможно, это упущение, что он не был обновлен.

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top