例如我有这样的事情:
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类方法原生(除了重载)。
答案 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