Python Can';t在方法中调用类实例变量
我对python有点经验,但对OOP很糟糕。如果有帮助的话,我会说我处在初级和中级之间 我有一门课:Python Can';t在方法中调用类实例变量,python,oop,Python,Oop,我对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.wikipedi
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\u链接(新建页面) 这对我来说似乎不合理,如果我的理解是正确的,那么您想要的是尝试遍历图中的所有节点 但是您使用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
'''
搜索算法可以帮助您遍历所有节点
希望这能对您有所帮助。您的第一个版本可能有打字错误。没有理由认为self.pages中的
不起作用。我假设您知道可变默认参数的问题。。?(并不是说这与名字错误有关)我不是真的。默认参数是否导致我出现问题?(我收到NameError)