简单的Python类定义不起作用

时间:2012-08-21 18:49:54

标签: python

在下面的代码中,编译器给出了在assingment之前引用的错误“Local variable 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

我在这里要做的是,我只想在标签是标题或正文中的任何标签时存储数据

2 个答案:

答案 0 :(得分:7)

第一个shouldStoreData是一个类属性。 handle_starttaghandle_data中的内容是局部变量。在handle_data中,您在分配变量之前对其进行测试。除非您明确地将其作为类/实例属性(例如self.shouldStoreDataMyHTMLParser.shouldStoreData)访问,否则方法内的代码不知道class属性是否存在。

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

def __init__(self):
    self.shouldStoreData = False

然后在其他方法中将其称为self.shouldStoreData

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

答案 1 :(得分:0)

一个简单的例子,使其更清晰:

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'