Class decorators in Python 2.5?

ぐ巨炮叔叔 提交于 2019-12-01 17:48:27

问题


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:


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



来源:https://stackoverflow.com/questions/4307419/class-decorators-in-python-2-5

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!