Class decorators in Python 2.5?

2019-02-22 11:06发布

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 decorators, 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?

1条回答
放荡不羁爱自由
2楼-- · 2019-02-22 11:40

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).

查看更多
登录 后发表回答