generating method names 'dynamically'

Daniel Nogradi nogradi at gmail.com
Thu Jan 26 19:53:17 EST 2006


> > My database has 1 table with 2 fields, one called 'name' and the other
> > one called 'age', let's suppose it has the following content, but this
> > content keeps changing:
> >
> > Alice 25
> > Bob  24
> >
> > ----------- program1.py ----------------
> >
> > class klass:
> >
> >      # do the stuff with getattr using the database
> >      # but in a way that after the database changes
> >      # I don't need to rewrite this part
> >
> >
> > inst = klass()
> >
> > ---------- program2.py ------------------
> >
> > import program1
> >
> > # This should print 'Hello, my name is Bob and I'm 24'
> > program1.inst.Bob()
>
> Where is the code that should print that?

The code should go into class klass: in place of the comments, if I
would know what to write there I wouldn't be asking the question :)
Sorry, if that was not clear.

> The code has to be defined,
> and is presumably outside your database, so *that* is the method you
> need to call, not something generated dynamically at runtime.
>
> > # This should print 'Hi, I'm 25 and I'm Alice'
> > program1.inst.Alice()
>
> That actually prints something different... did you intentionally change
> the order?  In other words, is the code that generates that output for
> Alice() actually different than the code for Bob() (and if so, where
> would you define it?) or did you just write the example imprecisely?

Sorry, I just wanted to illustrate that the output should depend on
the method called.
But maybe it's imprecise and misleading so let's forget about the
difference in ordering.

> Ultimately, I think the question here is "why do you want to do that"?
> Normally you would just make Bob and Alice parameters, as in:
>
> program1.inst.output("Alice")  # prints whatever you wanted above
> program1.inst.output("Bob") # prints whatever you wanted above, assuming
> the differences in the two outputs was inadvertent
> program1.inst.output("John") # raise exception

Well, I would normally do what you suggest, using parameters, but in
the example at hand I have to have the method names as variables and
the reason is that the whole thing will be run by apache using
mod_python and the publisher handler. There a URL
http://something.com/program2/Bob is mapped to the 'Bob' method of the
file program2.py and I want to be able to have URL's with different
names. I know I can solve this problem with parameters and functions
and using the GET http method, but I would like to have pretty URL's
without & and ? signs. I didn't want to ask this on the mod_python
list because after all it's a pure python question.

So I try again, hopefully it will be clearer this time:

--------- database content -----------

Alice 25
Bob  24

--------- program1.py -------------

class klass:

     # My question is what I should write here
     # assuming that I can query the database
     # using the names of the fields (name and age)
     # but without knowing in advance what will be
     # the result of the query.
     # The desired result of the code that should
     # come here (which I don't know, but asking you guys)
     # will be described below.

inst = klass()

--------- program2.py -----------

import program1

# The code in klass above should be such that the following
# line should print 'Hello my name is Bob and I'm 24.'
program1.inst.Bob()

# The code in klass above should be such that the following
# line should print 'Hello my name is Alice and I'm 25.'
program1.inst.Alice()

# The code in klass above should be such that the following
# line should print 'There was an error.'
program1.inst.John()

-------------------------------------------------------

I hope it's clear now that what I need is variable method names, the
wording 'generating' was probably also misleading and imprecise.

Thank you very much in any case.



More information about the Python-list mailing list