Класс декораторов в Python 2.5? - PullRequest
5 голосов
/ 29 ноября 2010

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

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

good.py:

alter_python_parser()
import bad

bad.py:

@decorated
class Foo(object): pass

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

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

EDIT:

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

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

1 Ответ

9 голосов
/ 29 ноября 2010

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

@decorated
class Foo(object): pass

становится

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

Реально изменить парсер невозможно.

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

...