Добавление декоратора к абстрактному методу - PullRequest
0 голосов
/ 03 октября 2019

Я пытаюсь добавить декоратор к абстрактному методу, чтобы при вызове метода в подклассах вызывалась также функция декоратора. Это для фреймворка, поэтому я пытаюсь ограничить количество лишнего кода, который потом пользователи должны будут кодировать. Декоратор довольно специфичен для фреймворка и не предназначен для использования обычными пользователями фреймворка - надеюсь, это имеет смысл.

Я знаю, что есть несколько других способов сделать это, но большинствоони вовлекают пользователя, копирующего некоторый шаблонный код, когда они создают свои собственные подклассы. Декоратор помогает избежать необходимости копировать шаблон.

from abc import abstractmethod, ABC

def prepost(fn):
    # The new function the decorator returns
    def wrapper(*args, **kwargs):
        print("In wrap 1")
        fn(*args, **kwargs)
        print("In wrap 2")
        return
    wrapper.__isabstractmethod__ = True
    return wrapper

class Base(ABC):
    pass

class Foo(Base):
    @prepost
    @abstractmethod
    def dosomething(self):
        raise NotImplementedError

class Bar(Foo):
    def dosomething(self):
        print("I'm doing something")

Test = Bar()
Test.dosomething()

Когда я пытаюсь это сделать, я просто получаю: я делаю что-то

, а не дополнительный вывод из декоратора.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...