no need to pass self at all actually, I can just return a binded function that is binded to this.