我是否有办法让类装饰器在 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
使用了什么?
答案 0 :(得分:9)
装饰者只是语法糖。只需更改装饰器用法的实例,即
@decorated
class Foo(object): pass
变为
class Foo(object): pass
Foo = decorated(Foo)
实际上,您无法更改解析器。
尽管如此,您可以使用ast module(在新版本的Python中)自动完成上述过程。