Переопределение поведения оператора присваивания в Python, чтобы сделать немного больше - PullRequest
1 голос
/ 05 декабря 2010

В своем последнем проекте я создаю основу для отладки.Одна из задач, которые я выполняю, - предоставить среду, которая позволит программисту определять обработчики, которые будут выполняться для обработки соответствующего исключения.Одним из доступных инструментов является проверка серии типов и значений, которые объект принял за время своего существования вплоть до исключения.Что бы скопировать все, что оценивается по праву присваивания, в мою среду, индекс lhseg a = 3

, это запись 3 в адрес памяти a, а также my_environment ["a"] (очевидно, областиусложнит структуру my_environment, но это другое дело).

Есть несколько способов сделать это.

функция, переданная в sys.settrace, может анализировать, что происходит с помощью инструментакак PLY или что-то еще, определить его назначение, разделить токены, взять 0-ю строку в качестве lhs. Она выполнит строку и затем скопирует значение в мою среду.

Я мог бы сам разобрать исходный код и вставитьвсе назначения в моем окружении после назначения в исходном исходном коде.

Я мог бы преобразовать каждый файл в AST и изменить узлы назначения на то, что мне нужно для этого сделать.

Или яможет просто взломать любую низкоуровневую функцию или что-то, что отвечает за генерацию кода для присваивания в его поведениея плюс мой.

Я хочу сделать последний выбор, так как он единственный, который делает то, что мне нужно, без необходимости разбора или других сложных вещей.Требуется ли для этого запись в C-части интерпретатора или я могу оставить ее на Python?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...