|
import sys
import logging
import functools
def audit( method ):
@functools.wraps(method)
def wrapper( self, *args, **kw ):
audit_log= logging.getLogger( 'audit' )
before= repr(self)
try:
result= method( self, *args, **kw )
after= repr(self)
except Exception as e:
audit_log.exception( '%s before %s\n after %s', method.__qualname__, before, after )
raise
audit_log.info( '%s before %s\nafter %s', method.__qualname__, before, after )
return result
return wrapper
class Person:
def __init__( self,*address ):
self.address=list(address)
@audit
def __iadd__( self, addr ):
self.address.append(addr)
return self
def __repr__( self ):
address= ", ".join( map(str,self.address) )
return "{__class__.__name__}({addr})".format(__class__=self.__class__, addr=address)
logging.basicConfig( stream=sys.stderr, level=logging.DEBUG )
p= Person("北京","上海","天津")
p.__iadd__('广东')
|
|
|