Proxying every function in a module

Steve Holden steve at holdenweb.com
Fri May 25 14:29:24 EDT 2007


Josh West wrote:
>> First off, don't attempt to start a new thread by replying to a previous 
>> one. Many newsreaders will merge the two, confusing the hell out of 
>> everyone and generally not helping.
>>   
> 
> Ahh, yes. I see what you mean. Explains why it didn't appear the first 
> time I posted (until later..).
> 
> Sorry for bother and thanks for the advice.
>> Second, what makes you think you need a module? I'd have thought an 
>> instance of some user-defined class would have been better, as that way 
>> you can redefine the __getattr__() method to return appropriate functions.
>>   
> The functions are ported from a java class static methods. I was trying 
> to be "pythonic" - since my 100 functions don't share state, I thought 
> they should be packaged as a module rather than as a class of bunch of 
> effectively static methods.
>> This seems to work, though I haven't tested it extensively (i.e. I have 
>> called one instance precisely  once ;-)
>>
>>  >>> import re
>>  >>> pat = re.compile("([a-z]+)(.+)")
>>  >>> class myRewriter:
>> ...   def srt(self, s):
>> ...     m = pat.match(s)
>> ...     if not m: raise ValueError(s)
>> ...     return m.group(1), m.group(2).lower()
>> ...   def __getattr__(self, name):
>> ...     n1, n2 = name.split("_")
>> ...     def f(val):
>> ...       s1, s2 = self.srt(val)
>> ...       return "/%s/%s/?sort=%s_%s" % \
>> ...               (n1, n2, s1, s2)
>> ...     return f
>> ...
>>  >>> r = myRewriter()
>>  >>> r.organisations_list('dateCreated')
>> '/organisations/list/?sort=date_created'
>>  >>>
>>
>> regards
>>   Steve
>>   
> Genius! Embarrassingly, I hadn't realised that __getattr__() is called 
> when a method is invoked, thus making the method name (attribute name) 
> so easily available as a string. I was therefore thinking in terms of 
> gnarly introspection/reflection things. This is much better.
> 
> Thanks very much
> 
> 
A pleasure. Welcome to Python, where genius is available to us all.

regards
  Steve
-- 
Steve Holden        +1 571 484 6266   +1 800 494 3119
Holden Web LLC/Ltd           http://www.holdenweb.com
Skype: holdenweb      http://del.icio.us/steve.holden
------------------ Asciimercial ---------------------
Get on the web: Blog, lens and tag your way to fame!!
holdenweb.blogspot.com        squidoo.com/pythonology
tagged items:         del.icio.us/steve.holden/python
All these services currently offer free registration!
-------------- Thank You for Reading ----------------




More information about the Python-list mailing list