1

以下のコードでは、コンパイラは割り当て前に参照された「ローカル変数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

ここで私がやろうとしているのは、タグがタイトルまたは本文内の任意のタグである場合にのみデータを保存したいということです。

4

2 に答える 2

7

1つ目shouldStoreDataはクラス属性です。内部のものhandle_starttaghandle_dataはローカル変数です。ではhandle_data、変数を割り当てる前に変数をテストします。self.shouldStoreDataメソッド内のコードは、クラス/インスタンス属性(たとえば、 )として明示的にアクセスしない限り、クラス属性が存在することを認識しませんMyHTMLParser.shouldStoreData

shouldStoreDataインスタンス属性になりたい場合は、__init__メソッドを記述してインスタンス属性として作成する必要があります。

def __init__(self):
    self.shouldStoreData = False

その後self.shouldStoreData、他の方法と同じように参照します。

Pythonチュートリアルを読んで、Pythonのクラス、属性、およびメソッドの基本を理解する必要があります。

于 2012-08-21T18:52:51.670 に答える
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'
于 2012-08-21T19:00:57.390 に答える