2010-11-29 110 views
5

有没有一种方法我可以对谷歌应用程序引擎,这仅限于Python 2.5类装饰工作?Python 2.5中的类装饰器?

或者让我改述一下:是否可以改变Python解析器的行为与它已经执行的同一个进程?例如:

good.py:

alter_python_parser() 
import bad 

bad.py:

@decorated 
class Foo(object): pass 

或者这也许只是白了是不可能的。

说明:我想使用大量使用类装饰器的第三方库,并且不想分叉并维护自己的版本。另一种方法是对Typhoon App Engine用较新的Python运行我的代码,但我担心谷歌不会对过长...时间提升自己的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`可能会有所帮助。如果有`_ast`模块的Python实现,我可以使用import hook来动态执行它... – 2010-11-29 20:28:08