web-dev-qa-db-fra.com

Qu'est-ce qu'un PyObject en Python?

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

26
eric

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.

14
icktoofay

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 PyObjects. Peu importe qu'il ait été écrit en Python ou en C, c'est un PyObject au niveau C malgré tout.

7