14

我有一个函数可以检索 Python 中的商店列表,这个函数被称为:

class LeclercScraper(BaseScraper):
    """
        This class allows scraping of Leclerc Drive website. It is the entry point for dataretrieval.
    """
    def __init__(self):
        LeclercDatabaseHelper = LeclercParser
        super(LeclercScraper, self).__init__('http://www.leclercdrive.fr/', LeclercCrawler, LeclercParser, LeclercDatabaseHelper)


    def get_list_stores(self, code):
        """
            This method gets a list of stores given an area code

            Input :
                - code (string): from '01' to '95'
            Output :
                - stores :
                    [{
                        'name': '...',
                        'url'
                    }]

        """

当我尝试写get_list_stores(92)我得到这个错误:

get_list_stores(92)
TypeError: get_list_stores() takes exactly 2 arguments (1 given)

你怎么能帮我解决这个问题?

4

3 回答 3

29

如果函数一个类(一个方法)中,写成这样:

def get_list_stores(self, code):

你必须通过类的一个实例来调用它:

ls = LeclercScraper()
ls.get_list_stores(92)

如果它在类之外,则不带self参数编写:

def get_list_stores(code):

现在它可以作为普通函数调用(注意我们不是通过实例调用函数,它不再是方法):

get_list_stores(92)
于 2013-08-27T18:32:57.543 回答
3

不要随意使用“self”——建议将 self 作为函数的第一个参数,这些函数被编写为类中的方法。在这种情况下,当它作为方法调用时,例如

class A(object):
    def get_list_stores(self,  code):
        ...

a = A()
a.get_listscores(92)

Python 将在调用时自动插入“self”参数(它将是外部范围内名为“a”的对象)

在类定义之外,有一个名为“self”的第一个参数没有多大意义——尽管它不是关键字,它本身并不是一个错误。

在您的情况下,您尝试调用的函数很可能是在类中定义的:您必须将其作为类实例的属性调用,然后您只需省略第一个参数 - 就像上面的示例一样.

于 2013-08-27T18:31:15.670 回答
3

如果您尝试在课堂上使用它,请像这样访问它:

self.get_listscores(92)

如果您尝试在类之外访问它,则需要首先创建一个实例LeclercScraper

x = LeclercScraper()
y = x.get_listscores(92)

另外,self不是关键字。它只是按照惯例选择的名称,用于表示其自身的类实例。

这是一个很好的参考:

自我的目的是什么?

于 2013-08-27T18:36:33.027 回答