web-dev-qa-db-ja.com

python

この短い例を実装して、単純な委任パターンを示します。私の質問はです。これは私が委任を正しく理解したように見えますか?

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')
18
MattyW

これが基本的な概念です。そうです。受信したリクエストを別のオブジェクトに渡して処理します。

6
Amber

1つPythonヒント:言う必要はありません:

func = getattr(self.handler, 'Handle')
func(event)

言うだけ:

self.handler.Handle(event)

Handlerクラスで何をしているのかわかりませんが、この例では使用されていません。

また、Pythonでは、大文字の名前を持つメソッドは非常に珍しく、通常、既存のAPIをそのような名前で移植した結果です。

14
Ned Batchelder