假设您有一个 Python (>=2.6) 类,其中包含大量(数百个!)方法。现在有人想要对其进行子类化,但意识到大多数基类方法只需要一些简单的“调整”。此外,只有少数几种不同的方法可以调整这些方法。有些涉及输入转换,有些涉及输出转换,有些则两者兼而有之。
更具体地说,我正在寻找一个(简单的)继承解决方案,我可以提供基类和一个(列表)方法列表来应用特定的转换,而无需将此样板代码添加到每个重载方法中。
谢谢,吃
跟进。
根据 gabo10yf 的回答,我想出了一个解决方案:
class B(object):
def f1(self, val):
print '1: ', val
def f2(self, val):
print '2: ', val
def decorator(f):
def g(self, *args, **kwargs):
print 'entering'
result= f(self, *args, **kwargs)
return g
class A(B):
pass
_overridden= ['f1', 'f2']
def override(cls):
for name in _overridden:
setattr(cls, name, decorator(getattr(cls, name).im_func))
override(A)
if __name__== '__main__':
b= B()
b.f1(1)
b.f2(2)
a= A()
a.f1(1)
a.f2(2)
它似乎真的有效。不过感觉太简单了,肯定还是有一些不明白的地方吧?无论如何,感谢你们让我弄清楚这一点!