Question

Je suis en train d'écrire une implémentation simple de Vector en tant que module d'extension Python en C qui ressemble la plupart du temps comme ceci:

typedef struct {
    PyObject_HEAD
    double x;
    double y;
} Vector;

static PyTypeObject Vector_Type = {
    ...
};

Il est très simple de créer des instances de Vector tout en appelant de Python, mais je dois créer une instance de Vector dans le même module d'extension. Je regardais dans la documentation, mais je ne pouvais pas trouver une réponse claire. Quelle est la meilleure façon de le faire?

Était-ce utile?

La solution

est d'appeler Simplest l'objet de type que vous avez créé, par exemple avec PyObject_CallFunction - ne laissez pas le nom vous tromper, il vous permet d'appeler any appelable, pas juste une fonction.

Si vous ne disposez pas d'une référence à votre objet de type facilement disponible en tant que static global à votre module C, vous pouvez récupérer de diverses manières, bien sûr (par exemple, à partir de votre objet module avec un PyObject_GetAttrString ). Mais coller ce PyObject* dans une variable de niveau module static C est probablement la plus simple et la plus pratique.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top