Оперативный ответ на #4EM8F6/KK5
Дунно, не видел в доках, но
echo -e 'class M(object):\n def __getitem__(self, key):\n key_type = type(key)\n if not isinstance(key, tuple): key = (key,)\n print("M()[{}] => {} sum: {}".format(", ".join(map(str, key)) if isinstance(key, tuple) else key, key_type, sum(key)))\n\nM()[1]\nM()[1, 2, 3]' | python
M()[1] => <type 'int'> sum: 1
M()[1, 2, 3] => <type 'tuple'> sum: 6
забыл выкинуть
if isinstance(key, tuple) else key
@anonymous А слайсы тут при чём? Со слайсами-то понятно. В #4EM8F6 было про использование нескольких объектов в качестве индекса, при котором эти несколько объектов собираются (как оператором *, но с нюансом, если объект один) в кортеж. В доках про это нет:
Ещё раз — пост был о том, что
obj[1, 2, 3]
эквивалентенobj[(1, 2, 3)]
.Имитация с обычным (на самом деле magic, но не суть) методом и *:
@anonymous А ещё их можно использовать вместе: