Определить класс MTuple, проксирующий тип tuple, с добавлением в него единственной операции — унарного минуса (операция возвращает MTuple с элементами в обратном порядке). Прочие операции также должны возвращать MTuple вместо tuple.

cпойлер: Вариант решения: использовать старые классы. Хранить в объекте проксируемый tuple. Переопределить __getattr__, в котором вместо поля данных возвращать поле проксируемого tuple-я. А вместо метода возвращать функцию, которая:

  1. Проверяет, нет ли в списке параметров MTuple-ей и заменяет их на проксируемые ими tuple

  2. Вызывает метод tuple-я с этими параметрами

  3. Если результат — tuple, преобразует его в MTuple

В новых классах спецметоды можно перебить только явно, или с помощью метакласса (это было бы более красиво).

   1 c=MTuple(range(10))
   2 print -(-c[2:6]+c[-1:2:-2])
   3 print -c[7:9]+("Bdyshch","Bdyshch")
   4 print {-c[3:5]:"QQ"}

(3, 5, 7, 9, 2, 3, 4, 5)
(8, 7, 'Bdyshch', 'Bdyshch')
{(4, 3): 'QQ'}


CategoryHomework

Lectures/PythonIntro/Homework_SelfishTuple (last edited 2015-03-19 06:45:22 by Class1)