2010-11-29 2 views
5

Есть ли способ, что я могу сделать декораторов класса работы на Google App Engine, который ограничен Python 2.5?Декораторы класса в Python 2.5?

Или позвольте мне перефразировать это: возможно ли изменить поведение парсера Python из того же самого процесса, который уже выполняется? Пример:

good.py:

alter_python_parser() 
import bad 

bad.py:

@decorated 
class Foo(object): pass 

Или это может быть просто явно невозможно.

Пояснение: Я хочу использовать стороннюю библиотеку, которая в значительной степени использует декораторы классов и не хочет ее разворачивать и поддерживать мою собственную версию. В качестве альтернативы можно запустить свой код на Typhoon App Engine с новым питоном, но я боюсь, Google не будет обновлять свою версию Python для займут слишком много времени ...

EDIT:

Как о создании new-style import hook, который будет выполнять замену строки «на лету» и загрузить модуль из памяти? Это должно быть возможно. Я попробую, если там уже нет реализации.

Но как я могу разобрать Python 2.6+ код от Python 2.5? Есть ли только синтаксический анализатор на основе python? Что делает PYPY?

ответ

9

Декораторы - это просто синтаксический сахар. Просто измените примеры использования декоратора, то есть,

@decorated 
class Foo(object): pass 

становится

class Foo(object): pass 
Foo = decorated(Foo) 

Вы не можете, реально, изменить анализатор.

Хотя, вы можете автоматизировать вышеуказанный процесс, используя ast module (в новой версии Python).

+0

Я знаю, что это только синтаксический сахар. Но я не хочу поддерживать массовые изменения кода, который уже работает. Таким образом, `ast`, вероятно, поможет. Если бы была реализация Python модуля `_ast`, я мог бы сделать это« на лету »с помощью импортного крючка ... – 2010-11-29 20:28:08