Foros del Web » Programando para Internet » Python »

problema con herencia en python

Estas en el tema de problema con herencia en python en el foro de Python en Foros del Web. hola comunidad estoy empezando a programar python y estoy haciendo un ejemplo sencillo donde tengo un museo y obras de arte, todas las obras tienen ...
  #1 (permalink)  
Antiguo 23/09/2011, 12:41
 
Fecha de Ingreso: marzo-2009
Mensajes: 155
Antigüedad: 15 años, 1 mes
Puntos: 1
problema con herencia en python

hola comunidad estoy empezando a programar python y estoy haciendo un ejemplo sencillo donde tengo un museo y obras de arte, todas las obras tienen caracteristicas comunes pero se dividen en 2 grupos pinturas y esculturas las cuales tienen sus caracteristicas particulares ademas tengo que hacer un metodo que me calcule un valor tanto para las pinturas como para las esculturas, esto es lo que tengo hecho pero no me funciona y tengo varias preguntas al respecto



Código Python:
Ver original
  1. from datetime import date
  2. class Obra(object):
  3.  
  4.     def __init__(self, anno, autor, fechaIngreso, valorBase,indiceCre):
  5.         self._anno = anno
  6.         self._autor = autor
  7.         self._fechaIngreso = fechaIngreso
  8.         self._valorBase = valorBase
  9.         self._indiceCre = indiceCre
  10.  
  11.     def CantAnnos(self):
  12.         now = date.today()
  13.         birthday = date(self._anno, 1, 1)
  14.         age = now - birthday
  15.         return age.days
  16.    
  17.     def _getAnno(self):
  18.         return self._anno
  19.     def _getAutor(self):
  20.         return self._autor
  21.     def _getFechaIngreso(self):
  22.         return self._fechaIngreso
  23.     def _getValorbase(self):
  24.         return self._valorBase
  25.     def _getIndice(self):
  26.         return self._indiceCre
  27.    
  28.     anno = property(fget = _getAnno)
  29.     autor = property(fget = _getAutor)
  30.     fecha = property(fget = _getFechaIngreso)
  31.     valorBase = property(fget = _getIndice)
# Properties

aqui tengo la clase obra, esta correcto declarar las property asi o no y si alguien me pudiera aclarar el tema de los atributos y las property bien

Código Python:
Ver original
  1. import Obra
  2.  
  3. class Pintura(Obra.Obra):
  4.  
  5.     def __init__(self, anno, autor, fechaIngreso, valorBase,indiceCre, dim,tecnica, material):
  6.         Obra.Obra.__init__(self,anno, autor, fechaIngreso, valorBase,indiceCre)
  7.         self._dim = dim
  8.         self._tecnica = tecnica
  9.         self._material = material
  10.  
  11.     def ValorObra(self):
  12.         valor = 0.0
  13.         if 1300 < Obra.Obra.anno < 1599:
  14.             valor = 0.6
  15.         elif   1600 < Obra.Obra.anno < 1799 :
  16.             valor = 0.4
  17.         elif 1800 < Obra.Obra.anno :
  18.             valor = 0.2
  19.        
  20.         return Obra.Obra._valorBase * valor * Obra.Obra.CantAnnos()
  21.  
  22.  
  23. class Escultura(Obra.Obra):
  24.  
  25.     def __init__(self, anno, autor, fechaIngreso, valorBase,indiceCre, material, peso, volumen):
  26.         super(Escultura, self).__init__(anno, autor, fechaIngreso, valorBase,indiceCre)
  27.         self._material = material
  28.         self._peso = peso
  29.         self._volumen = volumen
  30.        
  31.     def ValorObra(self):
  32.         valor = 0.0
  33.         if 1300 < Obra.Obra._anno < 1599:
  34.             valor = 0.7
  35.         elif   1600 < Obra.Obra._anno < 1799 :
  36.             valor = 0.5
  37.         elif 1800 < Obra.Obra._anno :
  38.             valor = 0.3
  39.        
  40.         return Obra.Obra._valorBase * valor * Obra.Obra.CantAnnos(self)

esta es la clase pintura y escultura que son hijas de Obra, decir que yo tengo un fichero para cada clase, es decir tengo un Obra.py, Pintura.py y un Escultura.py , esto cuando lo ejecuto me da un error es decir no se como en una clase hija hacer referencia a los elementos de una clase padre. otro elemento que gustaria que me aclaran es sobre el tiempo de vida de las variables ,por ejeplo en java el tiempo de vida de la variable es en bloque de instrucciones que se alla declarado, por ejemplo dentro de un if.

agradecere la ayuda de verdad que soy nuevo y he pasado un poco de trabajo, ahh estoy trabajndo con python 3.0 por si existe alguna variante con respecto a versiones anteriores.

saludos manuelle
  #2 (permalink)  
Antiguo 23/09/2011, 15:13
AlvaroG
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: problema con herencia en python

Hola manuelle,
Tu código es bastante "javero", se nota al ver tantos get de una sola línea en vez de property (sobretodo cuando en Python no existen realmente los atributos privados...).
Pero bueno, el problema me parece está dado ¡porque no estás accediendo a los atributos del objeto!

Si en java tenés

Código Java:
Ver original
  1. class B {
  2.     private int numero = 10;
  3. }
  4. class A(B) {
  5. }

¿usarías B.numero para acceder al atributo numero desde un objeto A? ¿Verdad que simplemente harías A.numero? ¡Pues en Python es igual!

Siendo Escultura una subclase de Obra, no necesitás hacer cosas como Obra.Obra._valorBase en ValorObra, basta con self._valorBase.

Esos son los dos problemas que veo con tu código, realmente deberías mostrar el error exacto que estás obteniendo para saber si hay algo más.


Saluods.

Etiquetas: herencia
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 20:25.