我正在寫很多非常類似的任務,並且想知道如何更好地繼承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