python - python类变量重置?
问题描述
我现在遇到了这个问题,所以我有一个使用 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
在你的代码中是 a class attribute
,它只会在第一次python interpreter
看到这个类时初始化,所以temp = ''
只会运行一次。
因此,将其移动__init__
以使其成为object attribute
一个很好的解决方案。
但是,如果你坚持让它class attribute
就像你在评论中所说的那样:
无论如何要声明一个可以在类内部和其他地方使用的全局变量?
顺便说一句,这不能称为global variable
,它是一个class attribute
.
然后你必须自己重置它。在您的代码中,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
为空,因此即使您根据需要在类的开头声明它,每个实例也不会相互影响。
但是,请注意,您不应替换lineA
为. 这将创建一个新的名称,然后将不再使用使您的目的达不到的任何一个。parser.temp = ''
parser.temp
object attribute
temp
parser.temp
lineB
class attribute
推荐阅读
- node.js - Chainlink 外部适配器从我自己的 api 服务器获取数据
- node.js - docker-compose npm install && npm start 在入口点
- json - 如何使用 UIButton 正确切换 JSON 颜色?
- r - 如果日期在两个日期之间,如何添加包含行数的列
- powershell - 两个 AD 域控制器之间的桥接机器
- python - 有什么方法可以在 matplotlib 中正确制作每周时间序列折线图?
- mysql - 在 Azure Key Vault 中存储 MySQL Enterprise 加密密钥
- php - 在 div 中调用 php 函数
- amazon-web-services - 发布时 AWS lambda 回滚
- c# - Apache Ignite,C#/.NET:BinaryObject 警告 - Execpted 和 Actual ValueType 不相等,无法查询条目