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 :

swig et __getitem__


Sujet :

Interfaçage autre langage Python

  1. #1
    Futur Membre du Club
    Inscrit en
    Octobre 2006
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 9
    Points : 7
    Points
    7
    Par défaut swig et __getitem__
    Bonsoir à tous. J'utilise Swig pour faire des modules en c++ pour Python. J'utilise souvent %extend pour creer des methodes comme __getitem__ par exemple. Quelquechose dans le genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    float  __getitem__(unsigned int i){
       	return self->operator()(i);
      }
    marche très bien mais si je fais un truc du style
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    float  __getitem__(unsigned int i, unsigned int j){
       	return self->operator()(i, j);
      }
    j'ai des erreurs lors que j'appelle maClasse[0,0] dans l'interpreter Python. Il me mets que __getitem__ necessite 3 args (self, i et j je suppose) mais que je ne lui en aie passé que 2. Par contre un appel direct à maClasse.__getitem__ fonctionne.
    Si quelqu'un à une idée pour corrigé cela, je lui en serais très reconnaissant. Merci.

  2. #2
    Futur Membre du Club
    Inscrit en
    Octobre 2006
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 9
    Points : 7
    Points
    7
    Par défaut
    En fait, il semblerait que lorsque l'on entre maClasse[ truc ], l'interpreteur Python cherche une fonction __getitem__(self, key) et donc maClasse[i, j] ne peut fonctionner alors que __getitem__(i, j) oui. Ca na donc rien a voir avec Swig.Par contre, si quelqu'un sait comment pouvoir utiliser l'operateur [] avec deux arguments, je suis preneur.

  3. #3
    Membre éprouvé

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

    Informations forums :
    Inscription : Août 2004
    Messages : 723
    Points : 923
    Points
    923
    Par défaut
    Il faudrait que tu puisses récupérer i sous forme de tuple, en effet, c'ets comme ça que Python gère les indices multiples:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    >>> class A:
    	def __getitem__(self, i):
    		return i
     
    >>> a = A()
    >>> a[1]
    1
    >>> a[1, 2]
    (1, 2)

  4. #4
    Futur Membre du Club
    Inscrit en
    Octobre 2006
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 9
    Points : 7
    Points
    7
    Par défaut
    Merci. C'est exactement ça. Faut donc que je convertisse les tuples de python en int[2] dans mon interface Swig. (avec %typemap par exemple)

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

Discussions similaires

  1. swig a partir d'une dll
    Par nezdeboeuf62 dans le forum Général Java
    Réponses: 2
    Dernier message: 15/02/2008, 13h07
  2. SWIG ne genere pas les bonnes methodes!
    Par nezdeboeuf62 dans le forum API standards et tierces
    Réponses: 1
    Dernier message: 01/03/2007, 18h24
  3. Subversion, Trac et .. SWIG !
    Par zigoo dans le forum Subversion
    Réponses: 1
    Dernier message: 21/02/2007, 15h28
  4. [swig] python->C->python, pointeur de fichier
    Par PyBio dans le forum Interfaçage autre langage
    Réponses: 1
    Dernier message: 10/11/2005, 15h50
  5. [swig] utilisation de ld sous mac osX tiger.
    Par PyBio dans le forum Interfaçage autre langage
    Réponses: 3
    Dernier message: 26/10/2005, 17h51

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