Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/287.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从子类继承的python3 decorator方法_Python_Python 3.x_Python Decorators - Fatal编程技术网

从子类继承的python3 decorator方法

从子类继承的python3 decorator方法,python,python-3.x,python-decorators,Python,Python 3.x,Python Decorators,正如上面所示的代码,我有一个抽象的AbstractTask类型和几个子类,我想把after_finish装饰器放在run方法中,这是应用于所有子类的一般行为。我怎样才能做到这一点,只要把装饰一次?或者在python3语法中还有其他方法可以做同样的事情吗?您可以使用第二种方法 您称之为:run 您覆盖的私有文件:\u run 使用abstractmethod可以帮助IDE在忘记实现该方法时发出警告 def after_finish(func): def _decorator(*arg

正如上面所示的代码,我有一个抽象的
AbstractTask
类型和几个子类,我想把
after_finish
装饰器放在
run
方法中,这是应用于所有子类的一般行为。我怎样才能做到这一点,只要把装饰一次?或者在python3语法中还有其他方法可以做同样的事情吗?

您可以使用第二种方法

  • 您称之为:
    run
  • 您覆盖的私有文件:
    \u run
使用
abstractmethod
可以帮助IDE在忘记实现该方法时发出警告

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


您可以使用第二种方法

  • 您称之为:
    run
  • 您覆盖的私有文件:
    \u run
使用
abstractmethod
可以帮助IDE在忘记实现该方法时发出警告

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