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语法中,还有其他方法做同样的事情吗?
发布于 2020-11-09 18:57:42
您可以使用第二种方法
您所称的公共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()https://stackoverflow.com/questions/64757639
复制相似问题