Python 2.5中的类装饰器?

时间:2010-11-29 19:47:33

标签: python google-app-engine python-2.5

我是否有办法让类装饰器 Google App Engine 上工作,仅限于 Python 2.5 ?< / p>

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

good.py:

alter_python_parser()
import bad

bad.py:

@decorated
class Foo(object): pass

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

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

EDIT:

如何创建一个new-style import hook,即可在运行中进行字符串替换并从内存中加载模块?那应该是可能的。如果那里没有实施,我会试一试。

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

1 个答案:

答案 0 :(得分:9)

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

@decorated
class Foo(object): pass

变为

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

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

尽管如此,您可以使用ast module(在新版本的Python中)自动完成上述过程。