Действительно, здесь у вас есть проект, который включает в себя объект Стратегия .
Ваш лучший подход - исправить родительский класс, включив в него вызов "объекта задержки".Задержка по умолчанию ничего не делает.
Это нарушает ожидаемый набор функций «поэтому мне даже не нужно знать все методы родительского класса».
Поиск метода не имеет удобного __getmethod__
, который соответствует __getattribute__
;этот пробел затрудняет использование внутренних элементов Python для вызова метода.
class Parent( object ):
delay= ZeroDelay()
def method1(self):
self.delay()
....
def method2(self):
self.delay()
...
class ZeroDelay( object ):
def __call__( self ):
pass
class ShortDelay( ZeroDelay ):
def __init__( self, duration=1.0 )
self.duration= duration
def __call__( self ):
time.sleep( self.duration )
class Child( Parent ):
delay= ShortDelay( 1 )
РЕДАКТИРОВАТЬ: Конечно, вы также можете украсить каждый метод.
def delayed( delayer ):
def wrap( a_method ):
def do_delay( *args, **kw ):
delayer()
return a_method( *args, **kw )
return do_delay
return wrap
class Parent( object ):
delay= ZeroDelay()
@delayed( self.delay )
def method1(self):
self.delay()
....
@delayed( self.delay )
def method2(self):
self.delay()
...