Ver Mensaje Individual
  #2 (permalink)  
Antiguo 07/11/2014, 07:08
AlvaroG
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Intentando modificar código en tiempo de ejecución en función de la versió

No creo que sea la mejor forma de hacerlo. Me parece que sería mejor intentar un import dentro de un bloque try, e implementar una "capa de compatibilidad" para python2.7 en un módulo propio:

Código Python:
Ver original
  1. try:
  2.     from abc import abstractclassmethod
  3. except ImportError:
  4.     from mimoduloparapython27 import abstractclassmethod

y luego usas abstractclassmethod normalmente en el código siguiente, que no se ve afectado por la selección de versión. Lo único que tendrías que hacer es definir el decorador abstractclassmethod en tu módulo, y que haga lo que necesites (o lo suficiente para que todo funcione bien)

Con respecto a la segunda pregunta, en Python no existen las variables privadas. Podés evitar que se importe al hacer "from modulo import *" poniéndole un _ delante del nombre (ej. _mivariable), pero no hay manera de hacerla realmente privada como en otros lenguajes (es decir, completamente inaccesible e invisible al mundo exterior). Si importo tu módulo via import:
Código Python:
Ver original
  1. import modulo
siempre podré hacer
Código Python:
Ver original
  1. modulo._variable = loquequiera

y eso vale tanto para tus variables, como para tus clases y funciones de módulo. Es la forma en la que funciona Python. Se pueden implementar algunos niveles de protección, pero depende de cuál sea tu intención al proteger la variable.


Saludos.