5

私は非常によく似たタスクをたくさん書いていますが、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に依存します。

4

1 に答える 1

6

私とマウロロッコの答えは役に立ちますか?

セロリタスクを見て、デコレータをカスタマイズする

そこで、拡張タスクに引数を渡すことに成功しました

于 2013-03-05T16:47:58.693 に答える