python c python-extensions

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.