Ответ 1
Каждое значение, которое вы можете коснуться в Python, это PyObject
в C. Это включает списки, словари, сокеты, файлы, целые числа, строки, функции, классы, которые вы называете. Если вы можете коснуться его в Python, его PyObject
в C.
Укороченная версия
Недавно я столкнулся с некоторым кодом Python, в котором возвращаемый тип для функции был указан как PyObject
в документации. Что такое PyObject
?
Подробная версия
Я не программист C/C++, но когда я столкнулся с PyObject
в документации, приведенной выше, Google научил меня, что PyObject
- это объект Python, определенный с помощью API Python/C. В частности, документация API определяет PyObject следующим образом:
Все типы объектов являются расширениями этого типа. Это тип, который содержит информацию, на которую Python должен обрабатывать указатель на объект как объект. В обычной сборке "release" он содержит только счет ссылок объектов и указатель на соответствующий объект типа. Он соответствует полям, определяемым расширением макроса PyObject_HEAD.
Честно говоря, я не совсем понимаю это или отвечает на мой основной вопрос, но это не заставляет меня думать, что, очевидно, неправильно думать о PyObject
как о объекте Python, о полной остановке. С другой стороны, возможно, чтобы технически считать PyObject
тип должен был быть создан как расширение стандартного Python с использованием API Python/C. Например, является целым числом PyObject
?
Потенциально релевантные ссылки
http://docs.scipy.org/doc/numpy/reference/c-api.types-and-structures.html
Каждое значение, которое вы можете коснуться в Python, это PyObject
в C. Это включает списки, словари, сокеты, файлы, целые числа, строки, функции, классы, которые вы называете. Если вы можете коснуться его в Python, его PyObject
в C.
PyObject
на самом деле является просто объектом Python на уровне C. А так как целые числа в Python являются объектами, они также являются PyObject
s. Неважно, написано ли это на Python или в C, это PyObject
на уровне C независимо.