Je n'ai pas regardé le module HTMLParser lui-même, mais je peux voir que le flux appelle de manière inhérente handle_data, qui dans votre classe dérivée effectue une impression. La réponse de @ ron suggère de passer directement les données à votre fonction, ce qui est totalement OK. Cependant, puisque vous êtes nouveau à la POO, jetez un coup d'oeil à ce code.
Ceci est Python, 2.x, mais je pense que la seule chose qui changerait est l'emplacement du paquet, html.parser au lieu de HTMLParser.
from HTMLParser import HTMLParser
class MyParser(HTMLParser):
def handle_data(self, data):
self.output.append(data)
def feed(self, data):
self.output = []
HTMLParser.feed(self, data)
p = MyParser()
page = """<html><h1>title</h1><p>I'm a paragraph!</p></html>"""
p.feed(page)
print p.output
output
['title', "I'm a paragraph!"]
Ici, je remplace la méthode d'alimentation de HTMLParser. Au lieu de cela, lorsque l'appel est fait p.feed(page)
, il appelle ma méthode, qui crée/définit une variable d'instance appelée sortie dans une liste vide, puis appelle la méthode de flux dans la classe de base (HTMLParser) et poursuit ce qu'elle fait normalement. Donc, en surchargeant la méthode d'alimentation, j'ai été capable de faire quelques trucs supplémentaires (ajouté une nouvelle variable de sortie). La méthode handle_data est pareillement une méthode de substitution. En fait, la méthode handle_data de HTMLParser n'a même rien fait ... rien du tout (selon les docs.)
Alors, juste pour préciser ...
Vous appelez p.feed(page)
qui appelle la MyParser La méthode .feed MyParser.feed définit une variable self.output et vide la liste puis appelle HTMLParser.feed La méthode handle_data ajoute la ligne à la fin de la liste de sortie.
Vous avez maintenant accès aux données via un appel à p.output.
Votre explication est incroyablement claire. Cela devrait être dans le manuel. Merci beaucoup! Je suis sur le point de donner ma réponse acceptée à Ron parce que ton score est plus élevé que le sien. Mais puisque votre réponse est si bonne qu'elle peut aider les autres, je pense que je devrais vous donner la réponse acceptée – zjk