2010-11-29 57 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