【发布时间】:2019-09-03 12:00:48
【问题描述】:
我想系统地包装一些基类的重写方法。
我使用ABC 作为基类。我试图包装@abstractmethod,将注释放在之前或之后,但它不起作用。据我了解,整个包装的方法都被覆盖了。
from functools import wraps
from abc import ABC, abstractmethod
def print_before(func):
@wraps(func)
def out(*args, **kwargs):
print('Hello')
return func(*args, **kwargs)
return out
class Base(ABC):
@print_before
@abstractmethod
def test(self):
pass
class Extend(Base):
def test(self):
print('World')
这是我们测试时发生的情况:
Extend().test()
结果:
World
期望:
Hello
World
我想我没有使用正确的方法来获得这种行为。在覆盖方法之前和之后运行一些代码的好 Python 方式是什么?
【问题讨论】:
标签: python python-3.x abstract-class wrapper abc