Peter Otten wrote:
You are right; the misunderstanding is that I wasn't advertising the above "fancy" solution (which is buggy, btw).
Yes, I wasn't sure about the irony in you last post ;)
Peter Otten wrote:
Thanks for the code! It's very similar to what I implemented but more flexible regarding inheritance.I have now implemented what I had in mind with the protocol to function name mapping, and I think /that/ is reasonably complex. I'm using instance methods in the demo, but it should work with class methods as well. class Error(Exception): def __init__(self, protocol): Exception.__init__(self, self.template.format(protocol)) class UnknownProtocolError(Error): template = "Unknown protocol {}" class ProtocolNotSupportedError(Error): template = "Protocol {} not supported" FOO = (42, 17) BAR = (1, 2) BAZ = (3, 4) HAM = (4, 5) SPAM = (5, 6) class HandlersBase(object): protocol_to_methodname = { FOO: "foo", BAR: "bar", BAZ: "baz", HAM: "ham", } def get_handler(self, protocol): try: methodname = self.protocol_to_methodname[protocol] except KeyError: raise UnknownProtocolError(protocol)method = getattr(self, methodname, None)if method is None: raise ProtocolNotSupportedError(protocol) return method class A(HandlersBase): def foo(self): print "A.foo" def bar(self): print "A.bar" def baz(self): print "A.baz"class B(A):def bar(self): print "B.bar" baz = None # hide parent implementation if __name__ == "__main__": for Class in A, B: inst = Class() print "---", Class.__name__, "---" for protocol in FOO, BAR, BAZ, SPAM: try: inst.get_handler(protocol)() except Error as err: print err
_______________________________________________ Tutor maillist - [email protected] To unsubscribe or change subscription options: http://mail.python.org/mailman/listinfo/tutor
