我正在干燥一些具有类代码副本并粘贴的代码。我已将代码制成子类,以实现所需的不同元素,但代码的残余之一是为一个通用命名的方法调用了特定于每个类的不同装饰器。
在这个例子中,它是foo
方法。@some_decorator_function
用于从每个类的另一个命名空间导入。现在装饰器只从父类调用一次,它不知道要使用什么装饰器,因为子类需要选择它。
有没有办法将装饰的功能委托给子类?
我的想法(并NotImplementedError
因为 X 被评估而立即提出):
class X:
def some_decorator_function():
raise NotImplementedError
@some_decorator_function()
def foo(self):
return "Yo!"
def concrete_function(func):
pass
class Y(X):
def some_decorator_function():
concrete_function
Y().foo