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 originaltry:
from abc import abstractclassmethod
except ImportError:
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:
siempre podré hacer
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.