简单Python类定义不起作用

2024-07-02 13:40:07 发布

您现在位置:Python中文网/ 问答频道 /正文

在下面的代码中,编译器给出了赋值前引用的错误“localvariable shouldStoreData”。但我是先分配的。你知道吗

class MyHTMLParser(HTMLParser):
    shouldStoreData = False
    textPartDoc = ""
    def handle_starttag(self, tag, attrs):
        print "Encountered a start tag:", tag
        if(tag == "title" or tag == "body"):
            shouldStoreData = True
    def handle_endtag(self, tag):
        print "Encountered an end tag :", tag        
    def handle_data(self, data):
        #print "Data is",data
        #print "valus of storeData is:",shouldStoreData
        if(shouldStoreData == True):
            textPartDoc  = textPartDoc + " " + data
            shouldStoreData = False

我在这里要做的是,我只想在标记是title或body中的任何标记时存储数据。你知道吗


Tags: selffalsetruedataiftitleisdef
2条回答

下面是一个简单的例子:

x='outside'

class A:
    x='inside'
    def __init__(self):
        print x           #prints the global x
    def func1(self):
        x='changed'      #changes the global x
        print x,A.x      #prints the global x and then the class's x

输出:

>>> a=A()
outside
>>> a.func1()
changed inside
>>> A.x
'inside'
>>> x
'outside'

第一个shouldStoreData是类属性。在handle_starttaghandle_data中的是局部变量。在handle_data中,在赋值之前测试变量。方法中的代码不知道class属性是否存在,除非您以类/实例属性的形式显式地访问它(例如self.shouldStoreDataMyHTMLParser.shouldStoreData)。你知道吗

如果希望shouldStoreData成为实例属性,则需要编写__init__方法并将其创建为实例属性:

def __init__(self):
    self.shouldStoreData = False

然后在其他方法中将其称为self.shouldStoreData。你知道吗

您应该阅读the Python tutorial,以掌握Python中类、属性和方法的基本知识。你知道吗

相关问题 更多 >