Frank Millman wrote:
On Aug 26, 10:54 am, Chris Rebert <c...@rebertia.com> wrote:
On Wed, Aug 26, 2009 at 1:22 AM, Frank Millman<fr...@chagford.com> wrote:

A

class MyClass(object):
    def on_message_received(self, msg):
        self.method_dict[msg](self)

    def method_0(self):
        print 'in method_0'

    def method_1(self):
        print 'in method_1'
        method_dict

    method_dict = {0: method_0, 1: method_1}
    #note this comes *after* the methods in question have been defined


Thanks, Chris. This is much better.

Is there some reason you aren't using a list instead of a dict?
e.g. method_dict = [method_0, method_1, method_2, etc]

For that matter, why are you associating methods with integers in the
first place?


I actually use constants to define my messages, like this -

(MESSAGE_ONE
,MESSAGE_TWO
,MESSAGE_THREE
) = xrange(3)

I can then refer to the messages by their description, but internally it uses integers.

An alternative is:

>>> class MyClass(object):
...     def on_message_received(self, msg):
...         try:
...             getattr(self, "method_%d" % msg)()
...         except AttributeError:
...             raise Exception("Unknown message")
...     def method_0(self):
...         print 'in method_0'
...     def method_1(self):
...         print 'in method_1'
...
>>> my_obj = MyClass()
>>> my_obj.on_message_received(0)
in method_0
>>> my_obj.on_message_received(1)
in method_1
>>> my_obj.on_message_received(2)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 6, in on_message_received
Exception: Unknown message
>>>
--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to