IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Interfaçage autre langage Python Discussion :

Wrapping C avec Python


Sujet :

Interfaçage autre langage Python

  1. #1
    Membre régulier

    Profil pro
    Inscrit en
    Août 2004
    Messages
    81
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 81
    Points : 71
    Points
    71
    Par défaut Wrapping C avec Python
    Bonjour,
    Voici mon problème:
    j'ai crée une classe en python Vector comme dans la FAQ du site
    Ensuite je definis dans un fichier py mes objets Vector :
    ex : self.V1 = Vector(1,2)
    self.V2 = Vector(3,4)


    si je fais une methode qui fait self.V1 = self.V1 + self.V2 pas de problème
    maintenant si je crée une methode qui fait self.V1 = 0. alors apres mon objet O de type Py_Object n'a plus le type vector mais le type float (O->ob_type = "float")
    Comment je peux faire pour recréer un Py_Object qui est le type vector et qui me fasse en fait un Vector(0,0) sans toucher au fichier py uniquement dans le C
    En gros je ne trouve pas les methode de creation d'un nouvelle objet de type vector, j'ai trouvé cette methode
    PyObject* PyType_GenericAlloc(PyTypeObject *type, Py_ssize_t nitems)
    mais je sais pas comment l utiliser car je sais pas comment définir un PyTypeObject type de type Vector
    Merci d'avance
    Jonathan

  2. #2
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Points : 20 970
    Points
    20 970
    Par défaut
    si tu fais self.V1 = un flottant, V1 sera un flottant. En revanche, si tu veux mettre le vecteur à 0, il te faut utiliser une méthode propre à V1 pour être remise à 0, par exemple self.V1[:] = 0

  3. #3
    Membre régulier

    Profil pro
    Inscrit en
    Août 2004
    Messages
    81
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 81
    Points : 71
    Points
    71
    Par défaut
    En fait j'ai deja posé le meme type de question et on m' repondu qu il n'existait pas de surchage pour la methode d'instanciation
    Alors qu'entends tu par "self.V1 [:]= 0" , que représente le [] ???
    Merci

  4. #4
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Points : 20 970
    Points
    20 970
    Par défaut
    Des crochets, comme pour une liste.

  5. #5
    Membre régulier

    Profil pro
    Inscrit en
    Août 2004
    Messages
    81
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 81
    Points : 71
    Points
    71
    Par défaut
    Ok merci
    Alors voila une autre question
    j'ai une fonction en Python :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    def Init(a,b):
      return a + b
    Ensuite en C:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    PyObject *pArgs = PyTuple_New(2);            
    PyObject *pName = PyFloat_FromDouble(1.);
    PyObject *pValue = PyFloat_FromDouble(2.);
     
    PyTuple_SetItem(pArgs, 0, pName);
    PyTuple_SetItem(pArgs, 1, pValue);
     
    pFunc = PyObject_GetAttrString(Fonction, "Init");
    Jusque la tout est bon mon pointeur pFunc n'est pas nulle
    apres je fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
     
    if (pFunc && PyCallable_Check(pFunc))
    {
       PyObject *pyValue = NULL;
       pyValue = PyObject_CallObject(pFunc, pArgs);
       if(pyValue)
      {	
        Py_DECREF(pyValue);					              
      }
    }
    et la mon pyValue est nulle, pourquoi ?
    alors que si je crée une fonction init sans parametre ca marche bien en mettant pArgs = NULL
    Merci

    C'est bon j'ai trouvé j'avais oublié le self comme argument de ma méthode Init
    merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. création de base mySQL avec python
    Par preacher_man dans le forum Bibliothèques tierces
    Réponses: 7
    Dernier message: 23/06/2006, 19h38
  2. Manipuler un fichier excel avec python
    Par dipajero dans le forum Général Python
    Réponses: 4
    Dernier message: 09/02/2006, 23h14
  3. cmt se connecté a oracle pour faire une requete avec python
    Par dipajero dans le forum Bibliothèques tierces
    Réponses: 6
    Dernier message: 28/12/2005, 20h22
  4. Réponses: 2
    Dernier message: 19/12/2005, 13h15
  5. Les 128 derniers bits d'un fichier en ligne avec Python ?
    Par ecocentric dans le forum Réseau/Web
    Réponses: 7
    Dernier message: 26/09/2005, 12h40

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo