Ответ 1
Это базовая концепция, да - передача некоторого входящего запроса другому объекту, о котором нужно позаботиться.
Я применил этот короткий пример, чтобы попытаться продемонстрировать простой шаблон делегирования. Мой вопрос. Похоже ли, что я правильно понял делегацию?
class Handler:
def __init__(self, parent = None):
self.parent = parent
def Handle(self, event):
handler = 'Handle_' +event
if hasattr(self, handler):
func = getattr(self, handler)
func()
elif self.parent:
self.parent.Handle(event)
class Geo():
def __init__(self, h):
self.handler = h
def Handle(self, event):
func = getattr(self.handler, 'Handle')
func(event)
class Steve():
def __init__(self, h):
self.handler = h
def Handle(self, event):
func = getattr(self.handler, 'Handle')
func(event)
class Andy():
def Handle(self, event):
print 'Andy is handling %s' %(event)
if __name__ == '__main__':
a = Andy()
s = Steve(a)
g = Geo(s)
g.Handle('lab on fire')
Это базовая концепция, да - передача некоторого входящего запроса другому объекту, о котором нужно позаботиться.
Один совет Python: вам не нужно говорить:
func = getattr(self.handler, 'Handle')
func(event)
просто скажите:
self.handler.Handle(event)
Я не уверен, что вы делаете с классом Handler, он не используется в вашем примере.
И в Python методы с именами верхнего регистра очень необычны, обычно это результат переноса некоторого существующего API с такими именами.