asincero <[EMAIL PROTECTED]> wrote:
>  Which is better: using an if/else construct to simulate a C switch or
>  use a dictionary?  Example:

Here is a technique I've used a lot.  I think I learnt it from "Dive
into Python"

    class foo(object):
        def do_1(self):
            print "I'm 1"
        def do_2(self):
            print "I'm 2"
        def do_3(self):
            print "I'm 3"
        def do_4(self):
            print "I'm 4"
        def do_5(self):
            print "I'm 5"
        def dispatch(self, x):
           getattr(self, "do_"+str(x))()
    
    f = foo()
    f.dispatch(1)
    f.dispatch(3)
    f.dispatch(17)

It will blow up gracelessly with an AttributeError if you pass it
something which it can't handle.  That is easy to fix.

You could name dispatch, __call__ if you wanted a slightly neater
syntax.
    
    f = foo()
    f(1)
    f(3)
    f(17)

You can do the same thing in a function using locals()["do_"+str(x)]
but I always find that if I've got to that point I should be using a
class instead.

>  Note that in this situation using OO polymorphism instead of a switch-
>  like construct wouldn't be applicable, or at least I can't see how it
>  could be.

If there is a "type" or "id" in your objects and you are switching on
it, then you should be using polymorphism.  Make each seperate "type"
a seperate class type and implement the methods for each one.  All the
switches will disappear from your code like magic!

Post more details if you want more help!

-- 
Nick Craig-Wood <[EMAIL PROTECTED]> -- http://www.craig-wood.com/nick
-- 
http://mail.python.org/mailman/listinfo/python-list

Reply via email to