Generator metadata/attributes

Rob Williscroft rtw at freenet.co.uk
Thu Jan 8 09:42:55 EST 2009


 wrote in news:053df793-9e8e-4855-aba1-f92482cd8922
@v31g2000vbb.googlegroups.com in comp.lang.python:

> class TaggedWrapper():
> 
>     def __init__(self, generator, logMixin, stream):
>         self.__generator = generator
>         self.__tag = '%s@%s' % (logMixin.describe(), stream)
>         logMixin._debug('Created %s' % self)

Note that "self" in the above is the instance of the wrapper class 
TaggedWrapper, not the class that is having its (generator) method
decorated.

import logging
logging.basicConfig( level = logging.DEBUG )

def mydecorator( f ):
  def decorated(self, *args):
    logging.debug( "Created %s", self.__class__.__name__ )
    for i in f(self, *args):
      yield i
  return decorated
  
class Example( object ):
  @mydecorator
  def foo(self, a, b, ):
    yield 1 + a + b
    
e = Example()
for i in e.foo( 2, 3 ):
  print( i )


Output of the above is:

    	DEBUG:root:Created Example
    	6

Rob.
-- 
http://www.victim-prime.dsl.pipex.com/



More information about the Python-list mailing list