Foros del Web » Programando para Internet » Python »

Problema con clases abstractas (interfaces)

Estas en el tema de Problema con clases abstractas (interfaces) en el foro de Python en Foros del Web. Buena, pues resulta que programé una interfaz simple para practicar pues estoy comenzando con python y resulta que en la prueba todo funciona correctamente El ...
  #1 (permalink)  
Antiguo 18/10/2012, 04:12
 
Fecha de Ingreso: octubre-2012
Ubicación: Málaga
Mensajes: 3
Antigüedad: 12 años, 1 mes
Puntos: 0
Problema con clases abstractas (interfaces)

Buena, pues resulta que programé una interfaz simple para practicar pues estoy comenzando con python y resulta que en la prueba todo funciona correctamente
El problema viene cuando intento crear mi interfaz en un modulo clase pues me dice que "NotImplemented" no es una variable declarada :S
Codigo de prueba:
Código:
class claseabstracta:
    
    def __init__(self,cad):
        self.cad=cad
    def mostrar(self):
        return NotImplemented

class implementacion(claseabstracta):
    def _init_(self,cad):
        return super(self,implementacion)._init_("asdas")
    def mostrar(self):
        print self.cad

print "hello world:"
var=claseabstracta("lorito")
print var.mostrar()

if __name__ == '__main__':
    pass
Codigo problematico:
Código:
class comm:
    
    def __init__(self,name,quality,id):
        self.name=name
        self.name=quality
        self.id=id
    
    def viewdata(self,name):
        return NotImplemented
  #2 (permalink)  
Antiguo 18/10/2012, 07:45
AlvaroG
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Problema con clases abstractas (interfaces)

pues así es, no has declarado ninguna variable con ese nombre. ¿No será que debes usar raise para lanzar la excepción?

raise NotImplemented()
  #3 (permalink)  
Antiguo 18/10/2012, 11:48
 
Fecha de Ingreso: octubre-2012
Ubicación: Málaga
Mensajes: 3
Antigüedad: 12 años, 1 mes
Puntos: 0
Respuesta: Problema con clases abstractas (interfaces)

Bueno mi duda era porque funciona en el primero y porque no en el segundo en ambos sitios esta sin declarar, sin embargo me ha pasado algo curioso , este problema lo estaba teniendo en el sobremesa , cuando he llegado al portatil abro el workspace del dropbox y va y funciona algo habrá mal instalado en mi ide del sobremesa digo yo.
Gracias por lo del raise pues no lo conocía :) y también es valido. A ver cuando llegue a casa si también le es valido a mi sobremesa, sino ... tendré que reinstalar eclipse
  #4 (permalink)  
Antiguo 18/10/2012, 14:51
Avatar de 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
  #5 (permalink)  
Antiguo 18/10/2012, 16:25
 
Fecha de Ingreso: octubre-2012
Ubicación: Málaga
Mensajes: 3
Antigüedad: 12 años, 1 mes
Puntos: 0
Respuesta: Problema con clases abstractas (interfaces)

No he entendido muy bien lo de clases de nuevo estilo:S

Etiquetas: clases
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 16:19.