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