Я пишу много задач, которые очень похожи, и хочу знать, как лучше создать подкласс 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.