【发布时间】:2013-09-22 10:01:19
【问题描述】:
假设我有一些基类:
class Task:
def run(self):
#override this!
现在,我希望其他人继承 Task 并覆盖 run() 方法:
class MyTask(Task):
def run(self):
#successful override!
但是,问题是在每个继承 Task 的类的 run() 方法之前和之后都必须发生逻辑。
似乎我可以做到这一点的一种方法是在基类中定义另一个方法,然后调用 run() 方法。但是,我想问,有没有办法用装饰器来实现这一点?这样做最pythonic的方式是什么?
【问题讨论】:
-
可能另一个进程将导入 Task 子类并调用 run() 方法。不确定这是否能回答您的问题?
-
你为什么不让它们覆盖
run,而是让API调用一些不同的方法来执行之前/之后的内容并调用run本身? -
为什么不让来自
Task的run()做它必须做的事情并调用在派生类中被覆盖的函数,例如do_run()?您仍然只要求派生类实现一个功能。 -
是的,对于我的用例来说,这些都是绝对可行的选择。我主要想知道是否有一些装饰魔法,或者是否有处理这类事情的标准方式。
标签: python inheritance decorator