Wouldn't a decorator solve this?