Ver Mensaje Individual
  #1 (permalink)  
Antiguo 23/09/2011, 12:41
manuelle
 
Fecha de Ingreso: marzo-2009
Mensajes: 155
Antigüedad: 15 años, 2 meses
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