我在网上看到一些博客,他们将自我参数放在他们的芹菜功能上,为什么我的导致错误如下:
TypeError: xml_gr() takes exactly 1 argument (0 given)
这是我的代码:
@periodic_task(run_every=timedelta(seconds=5))
def xml_gr(self):
ftp = FTP('xxxxx')
ftp.login(user='xxxxx', passwd='xxxxx')
x = xml_operation('AGIN', GR_GLOBAL_CURRENT_DATE, ftp, "GR")
ftp.close()
答案 0 :(得分:1)
“self”在类成员函数中使用。当您在类的实例中调用成员函数时,该语言会自动将类实例作为“self”传递。 “self”允许您访问班级成员。
class Thing:
var1 = None
def set_member(self, value):
self.var1 = value
def show_member(self, value):
return self.var1
然后使用
a = Thing()
a.set_member(23)
a.show_member()
您会看到回复23
。您不必明确传递“self”变量。
当你在一个类之外声明函数时,没有理由使用“self”。
答案 1 :(得分:1)
除了已接受的答案,self
还用于 celery 中绑定任务。
Bound tasks are needed for retries. for accessing information about
the current task request, and for any additional functionality
you add to custom task base classes.
因此,如果您指定 @task(bind=True)
,则需要添加 self
作为第一个参数。否则,不需要。