def after_finish(func):
def _decorator(*args, **kwargs):
ret = func(*args, **kwargs)
print('after finish!')
return ret
return _decorator
class AbstractTask:
@after_finish
def run(self):
raise NotImplementedError
class ConcreteTask1(AbstractTask):
def run(self):
# do concrete task here
return 0
如上面所示的代码,我有一个抽象AbstractTask
类型和几个子类,我想将after_finish
装饰器放入run
方法中,这是一种适用于所有子类的常规行为。我怎样才能通过仅将装饰器放置一次来实现此目的?还是在python3语法中还有其他方法可以做同样的事情?
您可以使用第二种方法
run
_run
abstractmethod
如果您忘记实现该方法,可以使用IDE来警告您
from abc import abstractmethod
def after_finish(func):
def _decorator(*args, **kwargs):
ret = func(*args, **kwargs)
print('after finish!')
return ret
return _decorator
class AbstractTask:
@after_finish
def run(self):
self._run()
@abstractmethod
def _run(self):
raise NotImplementedError
class ConcreteTask1(AbstractTask):
def _run(self):
return 0
if __name__ == '__main__':
c = ConcreteTask1()
c.run()
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句