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

时间:2010-02-02 15:08:13

标签: 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)

我会得到这个:

  

标题

     

我是一个段落!

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

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

2 个答案:

答案 0 :(得分: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!"]

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

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

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

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

答案 1 :(得分:2)

只是一个例子:

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)

祝学习OOP好运!