python

时间:2016-09-22 09:27:35

标签: python overloading wrapper

例如我有这样的事情:

class A(object):
    def __init__(self):
        pass

    def foo(self, a, b, c):
        return a + b + c


class B(object):
    def __init__(self):
        self.b = A()


def wrapper_func(func):

    def wrapper(self, *args, **kwargs):
        return func(self, a=3, *args, **kwargs)

    return wrapper


class C(B):
    def __init__(self):
        pass

    @wrapper_func
    def ???

是否有可能在没有继承自类foo的情况下,如何重载,然后在python中包装父B类字段的方法A?我确实需要包装器,因为我有不同的方法使用相同的参数,但同时我必须保存原始的B类方法原生(除了重载)。

1 个答案:

答案 0 :(得分:1)

使用C初始化super的父类,然后通过foo的{​​{1}}方法>类A()的继承属性b

C

试验:

def wrapper_func(func):
    def wrapper(self, *args, **kwargs):
        kwargs['a'] = 3
        return func(self, *args, **kwargs)
    return wrapper


class C(B):
    def __init__(self):
        super(C, self).__init__()

    @wrapper_func
    def bar(self, *args, **kwargs):
        return self.b.foo(*args, **kwargs) # access foo via attribute b

使用新的c = C() print(c.bar(a=1, b=2, c=3)) # 8 -> 3+2+3 方法通过c.b.foo修补程序调用装饰函数{/ 1}}方法:

c.b.foo

试验:

bar