Jay Loden wrote: > Hi all, > > First, apologies if anyone gets this twice, but it took me quite a > while to figure out that Python.org is evidently rejecting all mail > from my mail server because I don't have reverse DNS configured. > Anyway: > > I'm not even sure how to phrase this question properly or the right > terminology on this so bear with me. What I'm looking to find out is > > a) is there a functionality in Python where I can call a method I have > not defined ahead of time, and based on the method name, change the > functionality of the method at runtime?
Yes. Implement a __getattr__ method on your class (which you mention). > b) if not, what is the "Pythonic" approach to the problem outlined > below? Any recommendations on how to approach the problem differently > are welcome. > > I've googled and read my Python reference pretty extensively and I've > found some hints but nothing that really answered my questions, so > here I am :-) I did figure out that you can overload __getattr__ in > a clas to define a new method at runtime, but I got stuck when I > couldn't figure out how to have a method know what name it was > originally called with. That's the basic question, see below for the > context I'm asking the question in and *why* I want to do the above > :-) Ahh, so you want to pass the method name to the method that you are returning to be called. No problem. >>> import functools >>> >>> class foo: ... def __getattr__(self, name): ... return functools.partial(self.ActualMethod, name) ... ... def ActualMethod(self, name, *args, **kwargs): ... #handle *args and **kwargs based on name! ... print name, args, kwargs ... >>> foo().bar('hello', world=1) bar ('hello',) {'world': 1} >>> - Josiah -- http://mail.python.org/mailman/listinfo/python-list