我有一个名为的方法render
,它实际上是由一个子类实现的,并像这样调用:
class MyClass(object):
def __call__(self, *args, **kwargs):
api_response = self.render(*args, **kwargs)
return api_response
def render(self, *args, **kwargs):
""" This method is implemented by a subclass."""
raise NotImplementedError
def cascade_callables():
print 'Ask awesome people at stackoverflow for the solution to this problem.'
我有一个 callables 列表[c1, c2, c3]
。我想在cascade_callables
方法中做这样的事情,应该是这样的:
def cascade_callables():
callables = [c1, c2, c3]
callables.append(self.render)
self.render = reduce(some_decorator_that_accepts_two_functions, callables)
所以本质上,我正在尝试render
像这样工作而不修改实际的实现:
c1(*args, **kwargs)
c2(*args, **kwargs)
c3(*args, **kwargs)
render(*args, **kwargs)
我尝试了这样的事情来作为我可以使用的装饰器reduce
:
def cascade_modifiers(modifier1, modifier2):
def cascaded_modifier(self, *args, **kwargs):
modifier1(self, *args, **kwargs)
modifier2(self, *args, **kwargs)
return cascaded_modifier
但我得到了这个:
TypeError: cascaded_modifier() takes at least 1 argument (0 given)
使用我在这个问题中尝试解释的范式在 Python 2.7 中解决这个问题的最佳方法是什么?