2010-11-29 10 views
5

は私がPython 2.5に限定されているGoogle App Engineの、上クラスデコレーター作品を作ることができる方法はありますか?Python 2.5のクラスデコレータ?

私は、次のように言い換えることができます:すでに実行しているのと同じプロセスからPythonのパーサーの動作を変更することは可能ですか?例:

good.py:

alter_python_parser() 
import bad 

bad.py:

@decorated 
class Foo(object): pass 

それとも、これは不可能かもしれないだけはっきりあります。

説明:クラスデコレータを頻繁に使用する第三者のライブラリを使用したいと思っており、フォークして自分のバージョンを維持したくありません。作成について

EDIT:

どのように...代替は、新しいのpythonでTyphoon App Engineに私のコードを実行することですが、私はGoogleがloooong時間のために彼らのPythonのバージョンをアップグレードしません恐れます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」がおそらく助けになるでしょう。 Pythonの '_ast'モジュールの実装がある場合は、インポートフックを使ってオンザフライで行うことができます。 –

+0

バージョン2.6以上のastモジュールでのみ動作します。私はあなたがその場でそれを行うことができるだろうとは思わない。 –

+0

申し訳ありません。私はそれを試してみましょう。 –

関連する問題