この短い例を実装して、単純な委任パターンを示します。私の質問はです。これは私が委任を正しく理解したように見えますか?
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')
これが基本的な概念です。そうです。受信したリクエストを別のオブジェクトに渡して処理します。
1つPythonヒント:言う必要はありません:
func = getattr(self.handler, 'Handle')
func(event)
言うだけ:
self.handler.Handle(event)
Handlerクラスで何をしているのかわかりませんが、この例では使用されていません。
また、Pythonでは、大文字の名前を持つメソッドは非常に珍しく、通常、既存のAPIをそのような名前で移植した結果です。