python - cython
¿Qué es un PyObject en Python? (2)
Version corta
Recientemente encontré un código Python en el que el tipo de retorno para una función se especificaba como PyObject
en la documentación . ¿Qué es un PyObject
?
Versión detallada
No soy un programador de C / C ++, pero cuando me topé con PyObject
en la documentación vinculada anteriormente, Google me enseñó que PyObject
es un objeto de Python según se define con la API de Python / C. Específicamente, la documentación de la API define PyObject de la siguiente manera:
Todos los tipos de objetos son extensiones de este tipo. Este es un tipo que contiene la información que Python necesita para tratar un puntero a un objeto como un objeto. En una compilación de "versión" normal, contiene solo el recuento de referencia del objeto y un puntero al objeto de tipo correspondiente. Corresponde a los campos definidos por la expansión de la macro PyObject_HEAD.
Francamente, no entiendo completamente esto, o si responde a mi pregunta básica, pero no me hace pensar que es obviamente erróneo pensar en un PyObject
como un objeto Python, punto final. Por otro lado, tal vez para contar técnicamente como un PyObject
el tipo debe haber sido creado como una extensión de Python estándar utilizando la API de Python / C. Por ejemplo, ¿es un entero un PyObject
?
Enlaces potencialmente relevantes
http://docs.scipy.org/doc/numpy/reference/c-api.types-and-structures.html
Cada valor que puede tocar en Python es un PyObject
en C. Eso incluye listas, diccionarios, sockets, archivos, enteros, cadenas, funciones, clases, lo que sea. Si puedes tocarlo en Python, es un PyObject
en C.
Un PyObject
es, de hecho, solo un objeto Python en el nivel C. Y como los enteros en Python son objetos, también son PyObject
s. No importa si fue escrito en Python o en C, es un PyObject
en el nivel C independientemente.