Я хочу создать декоратор, который является членом класса, и который будет украшать унаследованный метод, который декорируется.
пример кода:
class A(object):
__metaclass__ = ABCMeta
def __init__(self):
pass
@classmethod
def the_decorator(cls, decorated): # <-----this is what i want, with or without self/cls as an argument
def decorator()
#do stuff before
decorated()
print "decorator was called!"
#do stuff after
return decorator
@abstractmethod
def inherited():
raise NotImplemented
class B(A):
def __init__(self):
super(B,self).__init__()
#@A.the_decorator <--- this is what I want,
@overrides
#@A.the_decorator <--- or this
def inherited():
print "B.inherited was invoked"
и
b = B()
b.inherited()
должен вывести
Был вызван B.inherited
Вызван декоратор!
Прочитав Это руководство по декораторам как членам класса , я до сих пор не смог выяснить, как декорировать унаследованные методы декораторами, определенными в суперклассе.
Обратите внимание, здесь @overrides
- этоопределяется пакетом overrides
pip install overrides
Также обратите внимание, что в настоящее время я использую Python 2.7, но хотел бы получить ответы как 2.7, так и 3+.
Спасибо!