首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从子类继承的python3装饰器方法

从子类继承的python3装饰器方法
EN

Stack Overflow用户
提问于 2020-11-09 18:52:52
回答 1查看 31关注 0票数 1
代码语言:javascript
复制
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语法中,还有其他方法做同样的事情吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-11-09 18:57:42

您可以使用第二种方法

您所称的公共run

  • the :您覆盖的_run

私有的

使用abstractmethod可以帮助IDE在忘记实现该方法时发出警告。

代码语言:javascript
复制
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()
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64757639

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档