Kent Johnson wrote:
Steven Bethard wrote:

Bruno Desthuilliers wrote:

class CommandMenuSelectionCallback:
    def __init__(self, key):
        self.key = key

    def __call__(self):
        print self.key


Looks like Java.

When was the last time you used Java? It has no support for using classes as callable objects. __call__ would have to be invoked manually; you definitely couldn't have a CommandMenuSelectionCallback instance masquerading as a function as this code (basically) does.

It's like Java in that it uses a short helper class to define an event callback. In the case of Java it would be an anonymous inner class programming to an interface. It's like Java in that it uses five lines of code to do what Python can do in one.

Well the second is definitely true. ;)

Do you really prefer this verbosity to a lambda expression?

Depends on the situtation. I do like that the signature of CommandMenuSelectionCallback is correct (that is, no arguments), where
lambda cmd=cmdkey: CommandMenuSelection(cmd)
has an optional argument when one is not asked for.


OTOH, in this particular case, the real problem is that the API has made a poor choice for callbacks. The signature of UI.CmdBtn.menu.add_command should be
add_command(label, command, *args, **kwargs)
instead of
add_command(label, command)
Of course API's won't always do things the way you want them to, so I can see that in working around API deficiences, lambda can occasionally seem useful.


STeVe
--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to