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)
本当に効きそうです。しかし、それはほとんど単純すぎるように感じますが、確かにまだいくつかの不明瞭な問題が含まれているに違いありません? とにかく、私にこれを理解させてくれてありがとう!