2010-11-29 10 views
5

¿Hay alguna manera de hacer que decoradores de clase trabajo sobre Google App Engine, que se limita a Python 2.5?Decoradores de clase en Python 2.5?

O permítanme reformular eso: ¿es posible alterar el comportamiento del analizador de Python del mismo proceso que ya se está ejecutando? Ejemplo:

good.py:

alter_python_parser() 
import bad 

bad.py:

@decorated 
class Foo(object): pass 

O se trata tal vez sólo claramente imposible.

Explicación: Deseo utilizar una biblioteca de terceros que utilice decoradores de clase en gran medida, y no quiero bifurcarla y mantener mi propia versión. Una alternativa sería la de ejecutar el código en Typhoon App Engine con un pitón más nuevo, pero me temo que Google no va a actualizar su versión de Python para muuuucho tiempo ...

EDIT:

¿Qué hay de la creación de una new-style import hook que haría la sustitución de cadenas sobre la marcha y cargar el módulo de la memoria? Eso debería ser posible. Lo intentaré, si no hay implementación ya disponible.

Pero, ¿cómo puedo analizar el código Python 2.6+ desde Python 2.5? ¿Hay un analizador solo de Python? ¿Qué usa PYPY?

Respuesta

9

Los decoradores son solo azúcar sintáctico. Sólo cambia casos de uso decorador, es decir,

@decorated 
class Foo(object): pass 

convierte

class Foo(object): pass 
Foo = decorated(Foo) 

No se puede, de manera realista, cambie el analizador.

Sin embargo, puede automatizar el proceso anterior utilizando el ast module (en una nueva versión de Python).

+0

Sé que es solo azúcar sintáctica. Pero no quiero mantener cambios masivos en el código que ya funciona. Por lo tanto, 'ast' probablemente sea útil. Si hubiera una implementación de Python del módulo '_ast', podría hacerlo sobre la marcha con un gancho de importación ... –

+0

Solo funcionará con el módulo ast anterior a la versión 2.6. Dudo que puedas hacerlo sobre la marcha. –

+0

Bien; Aunque lo intentaré. –

Cuestiones relacionadas