Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

variable d'une méthode en paramètre d'une autre

2 réponses
Avatar
Jules
Bonjour,

J'utilise (toujours ;-) xml.sax pour convertir un fichier XML en fichier
de requêtes SQL.

Dans ma classe Handler(ContentHandler), j'ai besoin d'utiliser dans la
méthode characters(self, text) des variables issues de la méthode
startElement(self, name, attr). Par exemple le contenu de attr['id'].

Mon code commence par :
#---------
def startDocument(self):
self._stack = []

def startElement(self, name, attr):
self._stack.append((name, attr)

def characters(self, text):
print "%s" % attr['id'] # <-c'est le résultat souhaité !
#----------

Comment puis-je faire ? J'ai essayer d'emboîter characters dans
startElement mais cela ne donne rien.

Mathématiquement (je comprends mieux comme ça), en gros, la fonction f
stocke les variables x, y, z et je souhaites que la fonction g prenne x,
y en paramètres pour sortir t, u et x, y ;-)

Merci.
Rémi (et pas Jules)

2 réponses

Avatar
Hervé Cauwelier
Dans ma classe Handler(ContentHandler), j'ai besoin d'utiliser dans la
méthode characters(self, text) des variables issues de la méthode
startElement(self, name, attr). Par exemple le contenu de attr['id'].


Rapidement, je n'ai pas regardé en détail, et par expérience de la
dernière fois où j'ai joué avec Sax...

Tu es dans une instance de classe, profite de la persistance de self
pour allouer des attributs d'un appel de méthode à l'autre.

Conseil gratuit : n'oublie pas que tu programmes une machine à état.

--
Hervé Cauwelier
http://www.oursours.net/

Avatar
F. Petitjean
Bonjour,

J'utilise (toujours ;-) xml.sax pour convertir un fichier XML en fichier
de requêtes SQL.

Dans ma classe Handler(ContentHandler), j'ai besoin d'utiliser dans la
méthode characters(self, text) des variables issues de la méthode
startElement(self, name, attr). Par exemple le contenu de attr['id'].

Mon code commence par :
#---------
def startDocument(self):
self._stack = []

def startElement(self, name, attr):
self._stack.append((name, attr)

def characters(self, text):
print "%s" % attr['id'] # <-c'est le résultat souhaité !
#----------

Comment puis-je faire ? J'ai essayer d'emboîter characters dans
startElement mais cela ne donne rien.

Mathématiquement (je comprends mieux comme ça), en gros, la fonction f
stocke les variables x, y, z et je souhaites que la fonction g prenne x,
y en paramètres pour sortir t, u et x, y ;-)


Ce ne sont pas des fonctions mais des méthodes et c'est ce qui vous
sauve : le premier argument 'self' désigne l'objet courant et vous
pouvez définir/redéfinir un attribut à tout moment (pas que dans
__init__). Par exemple self.attr_id = attr['id'] # dans startElement

Dans votre cas, comme vous dérivez d'une autre classe il faut tout de
même faire attention au nom choisi pour l'attribut, mais à mon avis un
truc du genre self.toto ou self.machin ne devrait pas enter en
conflit avec des noms de la classe de base :-)
self.machin = 'pouet' est équivalent à setattr(self, 'machin', 'pouet')

Merci.
Rémi (et pas Jules)