class meta(type):
def __new__(cls, name, bases, dict):
for key, value in dict.items():
if callable(value) and not key.startswith('__'):
dict[key] = decoratorforall(value)
return type.__new__(cls, name, bases, dict)
#should be called for every method call in the class
def decoratorforall(methodname):
def _method(self,*argl,**argd):
print "2 Inside __call__()"
returnval = getattr(self, '%s' % methodname)(*argl,**argd)
print "3 After self.f(*args)"
return returnval
return _method
class Person(object):
__metaclass__ = meta
def testprint(self,val):
print "blah blah"
a = Person()
a.testprint(20)
print "again calling"
a.testprint()