Предположим, у вас есть класс 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)
Это действительно похоже на работу. Однако это кажется почти слишком простым, оно, безусловно, должно содержать некоторые мутные проблемы? В любом случае, благодаря вам, все позволили мне понять это!