missing methods or __getattr__ problem
Uwe C. Schroeder
uwe at oss4u.com
Wed Oct 2 14:14:06 EDT 2002
Hi,
I'm a little stuck here and my brain turns in circles.
Here's what I'm trying to accomplish and I'm sure there is a very
simple solution to this problem:
The caller calles a method xx.callme(objecttype, parameters)
The called object keeps a list of class instances where the
paricularly wanted object can be found via the "objecttype"
parameter. However the called object itself doesn't have the called
attribute. What I'm looking for is a way to transparently call a
method as if it was part of the called object. So the called object
has to do the following:
1. figure out if the called attribute is a member of itself
2. if not 1. take the first parameter and look up the object in
which the wanted method resides
3. call the (hopefully found) method and return the results.
Using __getattr__ makes no sense since I need the parameters not
only the name. Using __call__ and have __getattr__ redirect to
__call__ won't work either since __call__ then has the paramters,
but not the method name.
How to do this ?
Here's some code example:
called object:
OBJ_PROGRAM = 5999
class bng:
def __init__(self):
# Objects is a class that keeps the references
# to instances of other objects containing
# the methods to call. It's much like a dict
self.obj=Objects(self.dbc)
def somefunction(self,bla):
pass
# This would be OK if I made a wrapper method for
# each method to be called
def getAllPrograms(self):
ob=self.obj.get(OBJ_PROGRAM)
return ob.getAll()
caller:
b=bng()
print bng.getAllPrograms() # works fine
print bng.getAll(OBJ_PROGRAM) # how to do this ?
Point is, that the final app will have hundreds of methods
to be called. The calls come in via XML-RPC and are all mapped to
the bng class instance. If I set up a wrapper for each method to be
called the bng class will be HUGE and hard to maintain.
Any help is appreciated.
UC
More information about the Python-list
mailing list