我有一个函数可以在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)
你怎么能帮我这个?
答案 0 :(得分:12)
如果函数是里面一个类(一个方法),请按如下所示编写:
def get_list_stores(self, code):
你必须通过该类的实例调用它:
ls = LeclercScraper()
ls.get_list_stores(92)
如果它在一个类之外,请在没有self
参数的情况下编写它:
def get_list_stores(code):
现在它可以被称为普通函数(注意我们没有在实例上调用函数,它不再是一个方法):
get_list_stores(92)
答案 1 :(得分:2)
你不要随意使用“self” - 建议self成为函数的第一个参数,这些函数被编写为类中的方法。在这种情况下,当它作为一个方法被调用时,就像在
中一样class A(object):
def get_list_stores(self, code):
...
a = A()
a.get_listscores(92)
Python会在调用时自动插入“self”参数 (它将是外部范围中名为“a”的对象)
在类定义之外,有一个名为“self”的第一个参数没有 很有道理 - 虽然,因为它不是一个关键词,它本身并不是一个错误。
在您的情况下,很可能,您尝试调用的函数是在类中定义的: 你必须将它称为类的实例的属性,然后你 只需省略第一个参数 - 就像上面的例子一样。
答案 2 :(得分:1)
如果您尝试在课程中使用它,请按以下方式访问:
self.get_listscores(92)
如果您尝试在课外访问它,则需要先创建LeclercScraper
的实例:
x = LeclercScraper()
y = x.get_listscores(92)
此外,self
不是关键字。它只是通过约定选择的名称来表示自身内的类实例。
这是一个很好的参考: