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.
Can you show some examples of what you mean here? It looks like you are talking about
```
key = {(1,2):3}
d[key]
```
but there's no slice there.
Since `__getitem__` will treat colon only as slice, I think maybe slice has responsibility to be more generic?
Can you clarify this too?