Why we need collate_fn()?

Yes, i have read some answers about that. But what confuse me is why not limit the tensor shape in __getitem__(). For example, i can reshape a tensor by truncating or padding in __getitem__() to meet requirements. Maybe collate_fn is more flexible, but is there any further difference?