Delegates in python
32,242
Solution 1
That's the basic concept, yes - passing on some incoming request to another object to take care of.
Solution 2
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.
Author by
MattyW
I love writing software for automation. From the low level firmware that controls the motor's through to the high level sequencing and state-spaced searching. Recently I've got into android and iPhone programming.
Updated on July 09, 2022Comments
-
MattyW almost 2 years
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')
-
MattyW almost 14 yearsThanks Ned, it's part of greater example using the Command Dispatch pattern which is why I'm using getattr, thanks for noticing the bad method name, I'll fix that