如何为打算扩展类的装饰器正确使用update_wrapper

时间:2020-06-03 11:42:43

标签: python decorator wrapper functools

我已经给了这个问题一段时间,但没有找到正确的答案。我正在使用装饰器,将更多成员添加到给定的类中。这是我使用的伪代码:

def test_decorator(aa,bb):
    def inner_func(test_class):
        class Wrapper(test_class):
            def __init__(self,*arg,**kwargs):
                super().__init__(*arg,**kwargs)
                self.aa = aa
                self.bb = bb           
                # add some more variables
            def print(self):
                print("a: {} b: {}".format(self.a,self.b))
        return Wrapper
    return inner_func

@test_decorator(aa = 0, bb = 1)
class test_class(object):
    def __init__(self,**kwargs):
        self.a = kwargs['a']
        self.b = kwargs['b']

obj = test_class(a=2,b=3)

在阅读Python functools.wraps equivalent for classes之后,我仍然不清楚如何使用functools.update_wrapper来正确保留包装好的类的身份,以便能够调用help(obj)obj.__name__等并查看test_class而不是Wrapper的信息

0 个答案:

没有答案