[Tutor] Problem with calling class methods stored in a list

Tobias M. tm at tobix.eu
Thu Jan 10 17:25:08 CET 2013


Am 10.01.2013 15:15, schrieb Peter Otten:
> Of course handle_1_42() is not exactly the method name one would hope for.
> You could, again, strive for simplicity and add a lookup table that maps
> protocol tuples to function /names/ , but as simplicity doesn't seem to be
> your cup of tea:
>
> class HandlersType(type):
>      def __init__(cls, name, bases, classdict):
>          cls.lookup_protocol = lookup = {}
>          for k, v in classdict.items():
>              if isinstance(v, protocol_method):
>                  lookup[v.protocol] = getattr(cls, k)
>
> class protocol_method(classmethod):
>      pass
>
> def protocol(x, y):
>      def attach_protocol(f):
>          f = protocol_method(f)
>          f.protocol = x, y
>          return f
>      return attach_protocol
>
> class D:
>      __metaclass__ = HandlersType
>
>      @protocol(42, 17)
>      def foo(cls):
>          print "Hi"
>
> D.lookup_protocol[42, 17]()
>
> ;)
>
In my eyes this is anything but simple.
Correct me if I'm wrong:
I already use a lookup table in my code, called "method_list" in my 
first post. The advantage of your above code is that I don't need to 
manually take care of the lookup table and extension by subclassing is 
easier.


More information about the Tutor mailing list