2024-10-01 04:54:38 发布
网友
有一个函数被decorator包装,它以HTML的形式返回函数的输出。我想调用这个函数,而不使用装饰器的HTML包装。有可能吗?在
示例:
class a: @HTMLwrapper def returnStuff(input): return awesome_dict def callStuff(): # here I want to call returnStuff without the @HTMLwrapper, # i just want the awesome dict.
__author__ = 'Jakob' class OptionalDecoratorDecorator(object): def __init__(self, decorator): self.deco = decorator def __call__(self, func): self.deco = self.deco(func) self.func = func def wrapped(*args, **kwargs): if kwargs.get("no_deco") is True: return self.func() else: return self.deco() return wrapped def spammer(func): def wrapped(): print "spam" return func() return wrapped @OptionalDecoratorDecorator(spammer) def test(): print "foo" test() print "***" test(no_deco=True)
当然可以:
class Example(object): def _implementation(self): return something_awesome() returnStuff = HTMLwrapper(_implementation) def callStuff(self): do_something_with(self._implementation())
class a: @HTMLwrapper def return_stuff_as_html(self, input): return self.return_stuff(input) def return_stuff(self, input): return awesome_dict
I did the same thing while waiting for a response and it works fine for me, but I'd still like to know if there's an even better way :) – olofom
因为在python中函数和方法都是对象,而且decorator返回一个可调用的,所以您可以在修饰的方法上设置一个指向原始方法的属性,但是像my_object那样的调用_instance.decorated_方法.original_method()会更难看,也不太明确。在
当然可以:
因为在python中函数和方法都是对象,而且decorator返回一个可调用的,所以您可以在修饰的方法上设置一个指向原始方法的属性,但是像my_object那样的调用_instance.decorated_方法.original_method()会更难看,也不太明确。在
^{pr2}$相关问题 更多 >
编程相关推荐