Delegates in python


Question

I've implemented this short example to try to demonstrate a simple delegation pattern. My question is. Does this look like I've understood delegation right?

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
14
9/4/2010 6:47:15 PM

Accepted Answer

That's the basic concept, yes - passing on some incoming request to another object to take care of.

6
9/4/2010 7:10:56 PM

One Python tip: you don't need to say:

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

just say:

self.handler.Handle(event)

I'm not sure what you are doing with your Handler class, it isn't used in your example.

And in Python, methods with upper-case names are very very unusual, usually a result of porting some existing API with names like that.


Licensed under: CC-BY-SA with attribution
Not affiliated with: Stack Overflow
Icon