如何从类中传递数据到另一个函数(在HTMLParser中)?

zjk*_*zjk 4 python class function

我开始学习python.我的python版本是3.1

我之前从未学过OOP,所以我对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)
Run Code Online (Sandbox Code Playgroud)

我会得到这个:

标题

我是一个段落!

我希望将这些数据传递给函数,我该怎么办?

抱歉我的英语不好,谢谢你的帮助!

sbe*_*rry 5

我没有查看HTMLParser模块本身,但我可以看到feed固有地调用handle_data,它在派生类中执行打印.@ ron的回答建议将数据直接传递给你的函数,这是完全可以的.但是,由于您是OOP的新手,可以查看此代码.

这是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!"]
Run Code Online (Sandbox Code Playgroud)

在这里,我将重写HTMLParser的feed方法.相反,当调用时p.feed(page),它将调用我的方法,该方法创建/设置一个名为output的实例变量到一个空列表,然后在基类(HTMLParser)中调用feed方法并继续它正常工作.因此,通过重写feed方法,我可以做一些额外的事情(添加一个新的输出变量).handle_data方法类似地是覆盖方法.事实上,HTMLParser的handle_data方法甚至没有做任何事情......根本没有(根据文档.)

所以,只是为了澄清......

您调用p.feed(page)MyParser.feed方法调用哪些MyParser.feed将变量self.output设置为空列表然后调用HTMLParser.feed handle_data方法将该行添加到输出列表的末尾.

您现在可以通过调用p.output来访问数据.