Как передать данные другой функции из класса (в HTMLParser)? - PullRequest
4 голосов
/ 02 февраля 2010

Я начинаю изучать питон. Моя версия Python 3.1

Я никогда раньше не изучал ООП, так что я смущен HTMLParser.

from html.parser import HTMLParser
class parser(HTMLParser):
def handle_data(self, data):
      print(data)

p = parser()
page = """<html><h1>title</h1><p>I'm a paragraph!</p></html>"""
p.feed(page)

Я получу это:

название

Я абзац!

Я хочу, чтобы эти данные были переданы в функцию, что мне делать?

Извините за мой плохой английский и спасибо за вашу помощь!

Ответы [ 2 ]

5 голосов
/ 02 февраля 2010

Я не изучал сам модуль HTMLParser, но я вижу, что фид по своей сути вызывает handle_data, который в вашем производном классе печатает.Ответ @ ron предполагает передачу данных непосредственно вашей функции, что вполне нормально.Тем не менее, поскольку вы новичок в ООП, возможно, взгляните на этот код.

Это Python, 2.x, но я думаю, что единственное, что может измениться, - это местоположение пакета, html.parser вместо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!"]

Здесь я переопределяю метод подачи HTMLParser.Вместо этого, когда вызов сделан p.feed(page), он вызовет мой метод, который создает / устанавливает переменную экземпляра с именем output в пустой список, а затем вызывает метод feed в базовом классе (HTMLParser) и продолжает то, что обычно делает.Итак, переопределив метод подачи, я смог сделать некоторые дополнительные вещи (добавил новую выходную переменную).Метод handle_data аналогично является методом переопределения.На самом деле, метод handle_data в HTMLParser даже ничего не делает ... вообще ничего (согласно документам).

Итак, просто чтобы уточнить ...

Вы звоните p.feed(page), который вызывает метод MyParser.feed. MyParser.feed устанавливает переменную self.output в пустой список и затем вызывает HTMLParser.feed. Метод handle_data добавляет строку в конец списка вывода.

Теперь у вас есть доступ к данным через вызов p.output.

2 голосов
/ 02 февраля 2010

Просто пример:

def my_global_fun(data):
    print "processing", data

class parser(HTMLParser):
    def my_member_fun(self, data):
        print "processing", data

    def handle_data(self, data):
        self.my_member_fun(data)
        # or
        my_global_fun(data)

Удачи в изучении ООП!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...