If you know that your decorator is always going to be called by a class method, you can also do this (and I also encourage the use of
def wrapper(self, *args, **kwargs):
ret = f(self, *args, **kwargs)
Increasing readability never hurts. (I also added
**kwargs in there out of habit).