【发布时间】:2013-10-20 13:18:51
【问题描述】:
在 python 中,有没有办法让抽象方法上的装饰器传递到派生实现?
例如,在
import abc
class Foo(object):
__metaclass__ = abc.ABCMeta
@abc.abstractmethod
@some_decorator
def my_method(self, x):
pass
class SubFoo(Foo):
def my_method(self, x):
print x
据我所知,SubFoo 的my_method 不会被some_decorator 装饰。有没有什么方法可以做到这一点,而不必单独装饰Foo 的每个派生类?
【问题讨论】:
-
恐怕只有广泛的魔法。调用抽象方法
_my_method并有一个非抽象的、非覆盖的my_method基本上是some_decorator(self._my_method)(*args, **kwds)的替代方法吗? -
@delnan 嗯,是的,我希望在广泛的元类魔法和你的好建议之间有一个解决方案,它有点干净。但我猜我会做我必须做的。