SAX questions...

Andrew Dalke adalke at mindspring.com
Wed Jul 23 00:18:32 CEST 2003


Timothy Grant:
> def startElement(self, name, attr):
>     if name == "foo":
>        do_foo_stuff()
>     elif name == "bar":
>         do_bar_stuff()
>     elif name == "baz":
>         do_baz_stuff()
  ...
> I could create a dictionary and dispatch to the correct method based on a
> dictionary key. But it seems to me there must be a better way.

  def startElement(self, name, attr):
    f = getattr(self, "do_" + name + "_stuff", None)
    if f is not None:
      f()

However, the dictionary interface is probably faster, and you can
build it up using introspection, like

class MyHandler:
    def __init__(self):
        self.start_d = {}
        self.end_d = {}
        for name in MyHandler.__dict__:
          if name.startswith("do_") and name.endswith("_stuff"):
            s = name[3:-6]
            self.start_d[s] = getattr(self, name)
         elif name.startswith("done_") and ...
            s = name[5:-6]
            self.end_d[s] = getattr(self, name)

    def startElement(self, name, attrs):
      f = self.start_d.get(name)
      if f:
        f()

    ...

                    Andrew
                    dalke at dalkescientific.com






More information about the Python-list mailing list