I have an issue with "self" as the name.  Self implies a handle to the class of the given object, and as an external api it's kinda misnamed.  I'd prefer something like apply.