Accessing a method from within its own code

Gerard Flanagan grflanagan at gmail.com
Mon Nov 2 10:29:26 EST 2009


Paddy O'Loughlin wrote:
> Hi,
> I was wondering if there was a shorthand way to get a reference to a 
> method object from within that method's code.
> 
> Take this code snippet as an example:
> import re
> 
> class MyClass(object):
>     def find_line(self, lines):
>         if not hasattr(MyClass.do_work, "matcher"):
>             MyClass.do_work.matcher = re.compile("\d - (.+)")
>         for line in lines:
>             m = MyClass.do_work.matcher.match(line)
>             if m:
>                 return m.groups()
> 
> Here, I have a method which uses a regular expression object to find 
> matches. I want the regexp object to be tied to the function, but I 
> don't want to have to recreate it every time the function is called

Just an idea:

------------------------------
import re

def matches(patt):
     def wrapper(fn):
         def inner(self, *args, **kw):
             return fn(self, *args, **kw)
         inner.match = re.compile(patt).match
         return inner
     return wrapper

class MyClass(object):

     @matches('ab(.*)')
     def func(self):
         print 'hi'
         return 5

c = MyClass()

ret = c.func()
print ret
print c.func.match('abc').groups()
------------------------------------





More information about the Python-list mailing list