Modificar código en tiempo de ejecución en función de la versión de python

Iniciado por SARGE553413, 7 Noviembre 2014, 09:32 AM

0 Miembros y 1 Visitante están viendo este tema.

SARGE553413

Hola a todos.

Tengo que hacer un proyecto en python que sea compatible con la versión 2.7. hasta ahora usaba esta versión pero he llegado a un punto del código en el que me vendría genial poder usar @abstraclassmethod que solo está en la versión 3 en adelante.

Lo que quiero hacer es, dentro del código, tener en una variable la versión del intérprete y, en función de si es mayor o menor que 3, hacer una cosa u otra.

Aquí un fragmento de código:

#dentro de ModuloA.py

__INTERPRETER_VERSION = float(sys.version.split(" ")[0])
if(__INTERPRETER_VERSION >= 3):
    from abc import abstractclassmethod

class AAA(object):
....
     if(__INTERPRETER_VERSION < 3):
        @classmethod
        def createPacket(cls, bArray, escaped):
            raise NotImplementedError("This method is not implemented in this class. See inheritance.")
    else:
        @abstractclassmethod
        def createPacket(cls, bArray, escaped):
            pass


El problema es que al ejecutar el código me dice que la variable _ModuloA__INTERPRETER_VERSION no está definida. Esto ya se que es por los dos guiones bajos.

Mis preguntas son:
1 - ¿Es buena idea hacer lo que estoy haciendo? ¿pongo simplemente la versión del 2.7 y ya está?

2 - ¿Cómo hago para definir una variable privada dentro del módulo y accederla dentro de las clases de dicho módulo?

Gracias, saludos.

1quark1

A ver si te vale:

import sys
ver = sys.version
ver=  (ver)[:3]
#2.7
#3.3