To be more sematic, there should be only one parameter, because it is "slice".
But in my case, I want to save a `{}` when passing `dict[tuple[int, int], int]` to `__getitem__` so I want it to be three different type parameters.
Since `__getitem__` will treat colon only as slice, I think maybe slice has responsibility to be more generic?