gpt4 book ai didi

python - 如何将数据从一个类传递给另一个函数(在 HTMLParser 中)?

转载 作者:太空狗 更新时间:2023-10-30 02:23:44 26 4
gpt4 key购买 nike

我开始学习 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)

我会得到这个:

title

I'm a paragraph!

我想将此数据传递给一个函数,我应该怎么做?

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

最佳答案

我没有查看 HTMLParser 模块本身,但我可以看到提要固有地调用 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 方法甚至什么都不做……什么都不做(根据文档。)

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

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

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

关于python - 如何将数据从一个类传递给另一个函数(在 HTMLParser 中)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2185020/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com