why we should use self as a return type for push function