Version courte
J'ai récemment rencontré du code Python dans lequel le type de retour d'une fonction a été spécifié comme PyObject
dans la documentation . Qu'est-ce qu'un PyObject
?
Version détaillée
Je ne suis pas un programmeur C/C++, mais quand j'ai rencontré PyObject
dans la documentation liée ci-dessus, Google m'a appris que PyObject
est un Python objet comme défini à l'aide de l'API Python/C. Plus précisément, la documentation de l'API définit PyObject comme suit:
Tous les types d'objets sont des extensions de ce type. Il s'agit d'un type qui contient les informations Python doit traiter un pointeur vers un objet comme un objet. Dans une version "release" normale, il ne contient que le nombre de références de l'objet et un pointeur vers le correspondant à l'objet type correspondant aux champs définis par l'extension de la macro PyObject_HEAD.
Franchement, je ne comprends pas bien cela, ni si cela répond à ma question de base, mais cela ne me fait pas penser qu'il est manifestement faux de penser simplement à un PyObject
comme un Python objet, point final. D'un autre côté, peut-être pour compter techniquement comme PyObject
le type doit avoir été créé comme une extension au standard Python utilisant le Python/API C. Par exemple, un entier est-il un PyObject
?
Liens potentiellement pertinents
http://docs.scipy.org/doc/numpy/reference/c-api.types-and-structures.html
Chaque valeur que vous pouvez toucher dans Python est un PyObject
en C. Cela inclut les listes, dictionnaires, sockets, fichiers, entiers, chaînes, fonctions, classes, vous l'appelez. Si vous pouvez le toucher en Python, c'est un PyObject
en C.
Un PyObject
n'est en fait qu'un objet Python au niveau C. Et comme les entiers dans Python sont des objets, ils sont aussi PyObject
s. Peu importe qu'il ait été écrit en Python ou en C, c'est un PyObject
au niveau C malgré tout.