Is there a way I can make class decorators work on Google App Engine, which is limited to Python 2.5
?
Or let me rephrase that: is it possible to alter the behavior of Python's parser from the same process that it is already executing? Example:
good.py:
alter_python_parser()
import bad
bad.py:
@decorated
class Foo(object): pass
Or is this maybe just plainly impossible.
Explanation: I want to use a third party library that heavily uses class decorat开发者_开发问答ors, and don't want to fork it and maintain my own version. An alternative would be to run my code on Typhoon App Engine
with a newer python, but I fear Google won't upgrade their Python version for a loooong time...
EDIT:
How about creating a new-style import hook that would do string substitution on-the-fly and load the module from memory? That should be possible. I'll give it a try, if there's no implementation already out there.
But how can I parse Python 2.6+
code from Python 2.5
? Is there a python-only parser? What does PYPY
use?
Decorators are just syntactic sugar. Just change instances of decorator usage, that is,
@decorated
class Foo(object): pass
becomes
class Foo(object): pass
Foo = decorated(Foo)
You can't, realistically, change the parser.
Though, you could automate the above process using the ast module (in a new version of Python).
精彩评论