gpt4 book ai didi

python类变量重置?

转载 作者:行者123 更新时间:2023-12-02 00:28:03 29 4
gpt4 key购买 nike

我现在有这个问题,所以我有一个使用 HTMLParser 库类的 HTMLParser,就像这样

class MyHTMLParser(HTMLParser):
temp = ''
def handle_data(self, data):
MyHTMLParser.temp += data

我需要临时变量,因为我需要将数据保存在其他地方,以便我可以在其他地方进行评估。

我的代码使用类如下所示:

for val in enumerate(mylist):
parser = HTMLParser()
parser.feed(someHTMLHere)
string = parser.temp.strip().split('\n')

问题是这个临时变量正在存储我之前存储的任何内容,即使我每次都声明一个解析器的新实例,它也不会重置。我如何清除这个变量???我不希望它保存上一个循环中的任何内容

最佳答案

temp 在你的代码中是一个类属性,它只会在第一次 python 解释器 看到这个类时初始化,所以 temp = '' 只会运行一次。

因此,将其移动到__init__,使其成为对象属性是一个很好的解决方案。

但是,如果你坚持让它作为一个class attribute,就像你在评论中说的那样:

Is there anyway to declare a global variable that can be used inside the class and elsewhere?

顺便说一句,这不能作为全局变量调用,它是一个类属性

然后你必须自己重置它。在你的代码中,handle_data 作为回调会被 feed 多次调用,所以在 handle_data 中没有机会这样做,你有在课外做。

对于您的代码,这可能类似于 lineA,仅供引用:

class MyHTMLParser(HTMLParser):
temp = ''
def handle_data(self, data):
MyHTMLParser.temp += data

for val in enumerate(mylist):
parser = MyHTMLParser()
MyHTMLParser.temp = '' # lineA
parser.feed(someHTMLHere)
string = parser.temp.strip().split('\n') # lineB

参见 lineA,它会将 temp 重置为空,因此即使您根据需要在类(class)开始时声明它,每个实例也不会相互影响。

但是,请注意,您不应该lineA 替换为 parser.temp = '' 或为 parser 分配任何值.temp。这将创建一个名为 temp 的新 object attribute,然后 lineB 中的 parser.temp 将不再使用class attribute 不再使你的目标无法实现。

关于python类变量重置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52999160/

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