python - Python 2.5 中的类装饰器?

标签 python google-app-engine python-2.5

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

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

good.py:

alter_python_parser()
import bad

坏.py:

@decorated
class Foo(object): pass

或者这可能是根本不可能的。

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

EDIT:

如何创建一个 new-style import hook那会即时进行字符串替换并从内存中加载模块吗?那应该是可能的。如果目前还没有实现,我会尝试一下。

但是我该如何解析 Python 2.6+来自 Python 2.5 的代码?是否有仅适用于 python 的解析器?什么是PYPY有什么用?

最佳答案

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

@decorated
class Foo(object): pass

成为

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

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

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

关于python - Python 2.5 中的类装饰器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4307419/

相关文章:

Python __reverse__ 魔术方法

python - pandas:聚合以保留第一个非 NaN 值

python - QListWidgetItem 保存列表之间的数据

google-app-engine - 如何解决对象管理器已关闭的错误?

python - 我可以恢复闭包包含 Python 循环的函数吗?

batch-file - 抑制 windows 命令行 PAUSE 命令

python - Try-Except-Finally 语句的过时书籍描述

python - readinto() 替换?

python - GAE 的 HTML 解析器

python - 没有版本检查或 `six`,如何使用 `except MyError, e:`和 `except MyError as e`来与Python 2&3一起使用?