Структура C PyObject содержит поля tp_as_number
, tp_as_sequence
и tp_as_mapping
. В каких обстоятельствах они вызываются? Может ли кто-нибудь предоставить некоторый пример кода Python, который приведет к вызову этих методов C?Когда используются методы C tp_as_mapping (et al.)?
ответ
Эти методы эквивалентны special methods python и вызывают в тех же обстоятельствах. Например, вызывается tp_as_number->nb_add
при выполнении a + b
и a
- тип расширения. Это эквивалент __add__
. Функции inplace_*
являются эквивалентами методов __i*__
.
Обратите внимание, что __r*__
метод реализованы просто свапирование аргументов нормальных функций, таким образом, 5 + a
где a
является тип расширения сначала попытается вызвать цифровую версию nb_add
, после того, как это не удалось его пытается nb_add
из a
положить 5
в качестве первого аргумент и a
как второй.
То же самое верно для tp_as_mapping
и tp_as_sequence
структур. Функции mp_length
и sq_length
вызываются встроенной функцией len
и эквивалентны __len__
. Теоретически вы можете реализовать разные функции для mp_length
и sq_length
, и в этом случае приоритет sq_length
(это видно из исходного кода, хотя я не знаю, документировано ли это поведение).
Также обратите внимание, что, например, оператор +
может быть реализован в различных функциях. sq_concat
вызывается после попытки nb_add
, и, таким образом, тип расширения может поддерживать оператор +
без наличия набора функций nb_add
.
- 1. Взвешенная степень по Opsahl et al. (2010)
- 2. Ошибка компилятора FlexBuilder - IWatcherSetupUtil2 et al
- 3. Правила правильно организованного багтрекера (Mantis et al)
- 4. Почему «et al» появляется в библиографии уценки?
- 5. Italicising «et al» in inline citiations в Rmarkdown
- 6. Почему люди все еще используют таблицы, inline css, et al?
- 7. Дизайн RESTful, как назвать страницы за пределами CRUD et al?
- 8. Нужно ли изучать JavaScript DOM-методы для веб-разработки, теперь у нас есть jQuery et al?
- 9. Лучшая практика - отслеживание удаленных данных (cURL, file_get_contents, cron, et al)?
- 10. Политика в мультиплексировании дескриптора файла Linux (select et al.)
- 11. Objective-C - Какие методы/объекты используются
- 12. Для чего используются методы?
- 13. прозрачный доступ к файлам на сайтах Samba на Linux et al. используя потоки IO C++
- 14. Как используются методы?
- 15. Как используются методы делегата
- 16. Используются ли методы TryAction()?
- 17. Когда используются слова C# «using»?
- 18. Что такое статические методы? Как и когда они используются?
- 19. Как изменяется версия пакета java, когда используются только устаревшие методы
- 20. % al register in C code
- 21. Когда используются Шварццианские преобразования?
- 22. Разрабатывает веб-приложение более эффективно с помощью Ext JS/Dojo & et al, чем с HTML/JQuery
- 23. Python nltk классифицируют с помощью большого набора функций (Replicate Go Et Al 2009)
- 24. Дизайнерский дизайн JSP/Servlet в Windows и Linux (Ubuntu, et. Al.)
- 25. Почему и когда используются события?
- 26. Func <T, U, double> et al. как параметры в конструкторе
- 27. Имея немного проблем с самообучением из книги алгологов Cormen et al
- 28. Использование openie для воспроизведения выделений, как показано в (Angeli et al.)
- 29. Как мне получить интерфейс SAX2 от libxml2, чтобы я мог видеть < et al?
- 30. Почему не существует перегрузки std :: initializer_list для std :: make_unique et al?
Большое спасибо. Был бы признателен, если бы вы могли указать мне на какой-нибудь дополнительный документ, если есть ... – isedev
@isedev. Вы можете найти документацию [здесь] (http://docs.python.org/2/c-api/objimpl.html). Вы также можете найти некоторую информацию в [учебнике] (http://docs.python.org/2/extending/newtypes.html#abstract-protocol-support) – Bakuriu