Определить класс MTuple, проксирующий тип tuple, с добавлением в него единственной операции — унарного минуса (операция возвращает MTuple с элементами в обратном порядке). Прочие операции также должны возвращать MTuple вместо tuple.
cпойлер: Вариант решения: использовать старые классы. Хранить в объекте проксируемый tuple. Переопределить __getattr__, в котором вместо поля данных возвращать поле проксируемого tuple-я. А вместо метода возвращать функцию, которая:
Проверяет, нет ли в списке параметров MTuple-ей и заменяет их на проксируемые ими tuple-и
Вызывает метод tuple-я с этими параметрами
Если результат — tuple, преобразует его в MTuple
В новых классах спецметоды можно перебить только явно, или с помощью метакласса (это было бы более красиво).
c=mod.MTuple(range(10)) print -(-c[2:6]+c[-1:2:-2]) print -c[7:9]+("Bdyshch","Bdyshch") print {-c[3:5]:"QQ"}
(3, 5, 7, 9, 2, 3, 4, 5) (8, 7, 'Bdyshch', 'Bdyshch') {(4, 3): 'QQ'}