是的,我是一個新的蟒蛇。這是我研究後的第一個程序。Python:如何在派生類中添加一個空列表
這是一個HTML抓取工具,用於抓取某個網站上的所有mp3文件。
我也做了工作,但有兩個問題混爲一談,這裏是我經歷過:
我嘗試添加一個類HTMLParser的派生。
class MyHTMLParser(HTMLParser.HTMLParser):
def handle_starttag(self, tag, attrs):
pass
它的工作。所以我試圖添加一個列表成員來記住它遇到的每個URL。
class MyHTMLParser(HTMLParser.HTMLParser):
urlList = []
def handle_starttag(self, tag, attrs):
pass
但很快我發現它就像是C++中的「靜態」類成員。
在python中,我們不需要在使用之前聲明一個成員。
這樣的代碼去:乳寧當
class MyHTMLParser(HTMLParser.HTMLParser):
def handle_starttag(self, tag, attrs):
if something:
self.urlList.append(target)
但蟒蛇彈出某些錯誤,說MyHTMLParser有「urlList」無屬性。
我很困惑,爲什麼python不會自動添加它?
,所以我說了這樣的「初始化」(在我心中「的聲明」):
class MyHTMLParser(HTMLParser.HTMLParser):
def __init__(self):
self.urllist = []
def handle_starttag(self, tag, attrs):
if something:
self.urlList.append(target)
但在這種形式下,蟒蛇跟我談HTMLParser的一些錯誤,我發現這是因爲我沒有打電話給父母init()。
這樣的代碼去:
class MyHTMLParser(HTMLParser.HTMLParser):
def __init__(self):
#DO PARENT CLASS INIT
self.urllist = []
def handle_starttag(self, tag, attrs):
if something:
self.urlList.append(target)
的#DO父類INIT,我發現下面列出的兩種方法。
一個是愚蠢的,我去了HTMLParser的lib和發現它在初始化沒有()和複製:
self.reset() #it's what HTMLParser did in __init__()
或
HTMLParser.HTMLParser.__init__(self)
我知道這是可行的,但很醜,所以我的問題是:
1,優先的方式來重寫它時調用父init()方法。
2,如何添加一個沒有「聲明」的列表成員就像我在代碼中列出的。
「巨蟒當您嘗試讀的東西不會自動創建的東西。 「這非常有幫助,謝謝。 – Ethansong
事實上,我試圖使用超級(MyHTMLParser,self).__ init __(),但結果是一個錯誤」TypeError:必須是類型,而不是classobj「 – Ethansong
@Ethansong肯定與此有關http://stackoverflow.com/questions/9698614/super-raises-typeerror-must-be-type-not-classobj-for-new-style-class – J0HN