Python Can';t在方法中调用类实例变量

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

我对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\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)