[英]Can't call class instance variable within a method
我對python有一定的經驗,但是對OOP卻很糟糕。 我想說的是,如果您有幫助,我正處於初學者和中級之間。
我有一堂課:
class WikiScrape:
def __init__(self, pages=[]):
self.pages = set() #my instance variable
這是有問題的方法
def get_links(self, URL):
pages = self.pages
html = urlopen("https://en.wikipedia.org/%s" % URL)
bsObj = BeautifulSoup(html)
for link in bsObj.findAll('a', href=re.compile(r'^/wiki')):
if 'href' in link.attrs:
if link.attrs['href'] not in pages:
# new page found
new_page = link.attrs['href']
print(new_page)
pages.add(new_page)
self.get_links(new_page)
這樣做是檢查鏈接列表中的某些內容是否在稱為頁面的集合中。 我的困惑來自在get_links()方法中引用此變量。
引用變量,例如:
if link.attrs['href'] not in self.pages:
給我一個名字錯誤。 我的理解是,只要在類實例中定義實例變量,就可以使用self來調用它們。 感到困惑,我嘗試了很多事情。
我添加了一行:
pages = self.pages
在功能上,它起作用。
基本上,將變量設置為self.pages而不是在for循環中引用self.pages可使該函數正常運行。
我的問題是,為什么我必須這樣做? 為什么我不能引用self.pages而不將其設置為相關方法中的變量。 還要擔心嗎? 有范圍嗎?
感謝您的閱讀,如果不清楚,我很樂意澄清
我認為self.pages應該可以。
但是我認為您的代碼中有些奇怪的地方:
get_links函數的最后一行,您編寫self.get_links(new_page)
對於我來說似乎不合理,如果我的理解正確,那么您想要的是嘗試遍歷圖中的所有節點。
但是您使用self.get_links(),這意味着每次您使用同一節點查找鏈接時,對不對?
因此,以下是目標示例代碼:
class Node:
def __init__(self):
self.link_hash = {}
self.is_seen = False
def depth_first_search(node):
'''
you can check the search algorithm
'''
搜索算法可以幫助您遍歷所有節點。
希望這對您有幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.