我正在写很多非常类似的任务,并且想知道如何更好地继承Task
以减少样板。由于一个任务只有一次安装,所以我不能像下面展示的那样把东西放在__init__
,但它应该说明这一点。子类化芹菜任务
什么,我试图完成:
class EmailTaskOne(Task):
def run(self, object_id):
email_data = EmailData.objects.get(pk=object_id)
data = self.do_common_stuff(email_data)
self.do_unique_stuff(data)
class EmailTaskTwo(Task):
def run(self, object_id):
email_data = EmailData.objects.get(pk=object_id)
data = self.do_common_stuff(email_data)
self.do_unique_stuff2(data)
# lots more tasks like this
我想什么有是:
class BaseEmailTask(Task):
abstract = True
#...Insert Magic Here...
class EmailTaskOne(BaseEmailTask):
def run(self, object_id):
self.do_unique_stuff(self.data)
那么,既然__init__
是正确的,我在哪里设置类的抽象类。我可以很容易地定义一堆函数,如果我想要做的是将一些东西分解出来,但是一些(大量)样板依赖于object_id。
可能重复http://stackoverflow.com/questions/6393879/celery-task-和定制修饰器) – Louis
虽然解决方案适用 - 问的问题是不同的。因此,我不认为它是重复的。如果我试图通过使用mixin和sublcassing任务来增加DRYness的任务 - 我不会寻找'customize decorator',而是'subclass'或'mixin'或类似的东西。 – yarbelk