The Base Classification Model

https://d2l.ai/chapter_linear-classification/classification.html

Can someone help me understand the code within the classifier below? I would assume it should be something like Y_hat = self.forward(X). So how does X become *batch[:-1]? and why no need to call self.forward() but just use self()?

Y_hat = self(*batch[:-1])