Ver Mensaje Individual
  #4 (permalink)  
Antiguo 18/10/2012, 14:51
Avatar de razpeitia
razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 8 meses
Puntos: 1360
Respuesta: Problema con clases abstractas (interfaces)

Lo que pasa aquí es bien simple. Ademas de no lanzar la excepción adecuada.

Es que no puedes (en python no debes) instanciar una clase abstracta.

Entonces en esta parte:
Código Python:
Ver original
  1. var=claseabstracta("lorito")
Deberia ser
Código Python:
Ver original
  1. var=implementacion("lorito")

En implementacion
Código Python:
Ver original
  1. def _init_(self,cad):
  2.        return super(self,implementacion)._init_("asdas")

Deberia ser
Código Python:
Ver original
  1. def __init__(self,cad):
  2.        return super(self,implementacion).__init__("asdas")

Tienes mucho mas errores, como por ejemplo que super solo lo puedes utilizar con clases de nuevo estilo, lanzar la excepción correcta, etc...

Código Python:
Ver original
  1. class ClaseAbstracta(object):
  2.     def __init__(self, cad):
  3.         self.cad = cad
  4.  
  5.     def mostrar(self):
  6.         raise NotImplementedError()
  7.  
  8.  
  9. class Implementacion(ClaseAbstracta):
  10.     def __init__(self, cad):
  11.         super(Implementacion, self).__init__(cad)
  12.  
  13.     def mostrar(self):
  14.         print self.cad
  15.  
  16.  
  17. if __name__ == '__main__':
  18.     var = Implementacion("lorito") #OK, esto es lo que se debe de hacer
  19.     var.mostrar() # Esto es lo que intentas hacer.
  20.  
  21.     # Ejemplo de lo que no se debe de hacer
  22.     var = ClaseAbstracta('lorito') #Ok, puedes instanciar (pero no debes)
  23.     var.mostrar() # No puedes utilizar el objeto