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

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

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

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

  3. Если результат — 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'}


CategoryHomework

LecturesCMC/PythonIntro2014/Homework_SelfishTuple (последним исправлял пользователь FrBrGeorge 2014-11-30 20:10:08)