Python 2.5中的类装饰器?

Att*_* O. 5 python google-app-engine python-2.5

有没有办法可以让类装饰器Google App Engine上运行,仅限于Python 2.5

或者让我重新说一下:是否有可能从已经执行的同一进程中改变Python解析器的行为?例:

good.py:

alter_python_parser()
import bad
Run Code Online (Sandbox Code Playgroud)

bad.py:

@decorated
class Foo(object): pass
Run Code Online (Sandbox Code Playgroud)

或者这可能显然是不可能的.

说明:我想使用大量使用类装饰器的第三方库,并且不想分叉它并维护我自己的版本.另一种方法是Typhoon App Engine使用更新的python 运行我的代码,但我担心谷歌不会在一段时间内升级他们的Python版本......

EDIT:

如何创建一个新的导入钩子,可以在运行中进行字符串替换并从内存加载模块?那应该是可能的.如果那里还没有实现,我会试一试.

但是我如何解析Python 2.6+代码Python 2.5呢?有没有python的解析器?有什么PYPY用?

dan*_*rth 9

装饰者只是语法糖.只需更改装饰器用法的实例,即

@decorated
class Foo(object): pass
Run Code Online (Sandbox Code Playgroud)

class Foo(object): pass
Foo = decorated(Foo)
Run Code Online (Sandbox Code Playgroud)

实际上,您无法更改解析器.

但是,您可以使用ast模块(在新版本的Python中)自动执行上述过程.

  • jfyi,我创建了一个导入钩子,它将使用`lib2to3`中的`ast`树来修复类装饰器:http://pypi.python.org/pypi/seven (2认同)