temp
в вашем коде - 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
, что сделает вашу цель недостижимой.