5

有没有办法让类装饰器Google App Engine上工作,仅限于Python 2.5

或者让我换个说法:是否可以从它已经执行的同一进程中改变 Python 解析器的行为?例子:

好.py:

alter_python_parser()
import bad

坏的.py:

@decorated
class Foo(object): pass

或者这可能是完全不可能的。

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

EDIT:

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

但是我怎样才能解析Python 2.6+代码Python 2.5呢?是否有仅限 python 的解析器?有什么PYPY用?

4

1 回答 1

9

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

@decorated
class Foo(object): pass

变成

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

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

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

于 2010-11-29T19:53:44.380 回答