Ver Mensaje Individual
  #1 (permalink)  
Antiguo 06/08/2009, 23:08
AxL456
Invitado
 
Mensajes: n/a
Puntos:
problema con clases

buenas tengo un pequeño problema a la hora de reescribir un parametro en un clase que hereda sus otros parametros de una clase superior..

para que me entiendan mejor aqui dejo el codigo:

Código python:
Ver original
  1. import scipy as sp
  2. import scipy.linalg as linalg
  3.  
  4. class solution:
  5.     def __init__(self):
  6.         self.feed_flow = 70.0
  7.         self.feed = sp.array([0.15,0.25,0.4,0.2])
  8.         self.comp_names = ("xylene", "styrene", "toluene", "benzene")
  9.         self.var=("D_1", "B_1", "D_2", "B_2")
  10.         self.xylene = sp.array([0.07,0.18,0.15,0.24])
  11.         self.styrene = sp.array([0.04,0.24,0.1,0.65])
  12.         self.toluene = sp.array([0.54,0.42,0.54,0.1])
  13.         self.benzene = sp.array([0.35,0.16,0.21,0.01])
  14.         T0_comp_frac = self.feed_flow * self.feed    # component fraction on first tower (T0)
  15.         self.comp_eq = sp.array([self.xylene, self.styrene,
  16.                                  self.toluene, self.benzene]) #components linear equations
  17.         self.solve= sp.array(linalg.solve(self.comp_eq, T0_comp_frac))
  18.         self.D = self.solve[0] + self.solve[1]
  19.         self.B = self.solve[2] + self.solve[3]
  20.        
  21.     def comp(self):
  22.         print "D= %s" % self.D
  23.         print "B= %s" % self.B
  24.         for i in range(len(self.var)):
  25.                 print self.var[i], "=", self.solve[i]
  26.         flowname= ("D","B")
  27.         x = 0
  28.         while x<= 3:
  29.             y=0
  30.             z=0
  31.             while y<=2:
  32.                 temp = (self.comp_eq[x,y]*self.solve[y] +
  33.                         self.comp_eq[x,y+1]*self.solve[y+1])/(self.solve[y]+self.solve[y+1])
  34.                 y+=2
  35.                 print self.comp_names[x]+ " in "+ flowname[z]+" = ", temp
  36.                 z+=1
  37.             x+=1
  38.    
  39. class solution2(solution):
  40.     def __init__(self, percent):
  41.         self.feed_flow = 70.0 - 70.0 * percent
  42.    
  43.        
  44. if __name__=="__main__":
  45.     solution=solution()
  46.     solution.comp()
  47.     print "*" * 80
  48.     percent = 0.01
  49.     solution2=solution2(0.01)
  50.     solution2.comp()

el problema lo tengo es exactamente en esta parte del codigo:
Código Python:
Ver original
  1. class solution2(solution):
  2.     def __init__(self, percent):
  3.         self.feed_flow = 70.0 - 70.0 * percent

lo que deseo hacer es especificar una clase "hijo" que herede todos los atributos de la clase "padre" solution menos el parametro feed_flow


el problema es que me manda este error:
Código:
Traceback (most recent call last):
  File "C:\Python25\destilacion3.py", line 50, in <module>
    solution2.comp()
  File "C:\Python25\destilacion3.py", line 22, in comp
    print "D= %s" % self.D
AttributeError: solution2 instance has no attribute 'D'
por lo que entiendo me esta indicando que al ejecutar la funcion comp() dentro de la clase solution2 no encuentra el parametro self.D

lo que no entiendo es porque ocurre este problema si supuestamente la clase solution2 hereda los parametros de la clase solution

hasta los momentos he logrado que el codigo corra adecuadamente reescribiendo TODOS los parametros de la clase base en solution2 de la siguiente manera
Código Python:
Ver original
  1. import scipy as sp
  2. import scipy.linalg as linalg
  3.  
  4. class solution:
  5.     def __init__(self):
  6.         self.feed_flow = 70.0
  7.         self.feed = sp.array([0.15,0.25,0.4,0.2])
  8.         self.comp_names = ("xylene", "styrene", "toluene", "benzene")
  9.         self.var=("D_1", "B_1", "D_2", "B_2")
  10.         self.xylene = sp.array([0.07,0.18,0.15,0.24])
  11.         self.styrene = sp.array([0.04,0.24,0.1,0.65])
  12.         self.toluene = sp.array([0.54,0.42,0.54,0.1])
  13.         self.benzene = sp.array([0.35,0.16,0.21,0.01])
  14.         T0_comp_frac = self.feed_flow * self.feed    # component fraction on first tower (T0)
  15.         self.comp_eq = sp.array([self.xylene, self.styrene,
  16.                                  self.toluene, self.benzene]) #components linear equations
  17.         self.solve= sp.array(linalg.solve(self.comp_eq, T0_comp_frac))
  18.         self.D = self.solve[0] + self.solve[1]
  19.         self.B = self.solve[2] + self.solve[3]
  20.        
  21.     def comp(self):
  22.         print "D= %s" % self.D
  23.         print "B= %s" % self.B
  24.         for i in range(len(self.var)):
  25.                 print self.var[i], "=", self.solve[i]
  26.         flowname= ("D","B")
  27.         x = 0
  28.         while x<= 3:
  29.             y=0
  30.             z=0
  31.             while y<=2:
  32.                 temp = (self.comp_eq[x,y]*self.solve[y] +
  33.                         self.comp_eq[x,y+1]*self.solve[y+1])/(self.solve[y]+self.solve[y+1])
  34.                 y+=2
  35.                 print self.comp_names[x]+ " in "+ flowname[z]+" = ", temp
  36.                 z+=1
  37.             x+=1
  38.    
  39. class solution2(solution):
  40.     def __init__(self, percent):
  41.         self.feed_flow = 70.0 - 70.0 * percent
  42.         self.feed = sp.array([0.15,0.25,0.4,0.2])
  43.         self.comp_names = ("xylene", "styrene", "toluene", "benzene")
  44.         self.var=("D_1", "B_1", "D_2", "B_2")
  45.         self.xylene = sp.array([0.07,0.18,0.15,0.24])
  46.         self.styrene = sp.array([0.04,0.24,0.1,0.65])
  47.         self.toluene = sp.array([0.54,0.42,0.54,0.1])
  48.         self.benzene = sp.array([0.35,0.16,0.21,0.01])
  49.         T0_comp_frac = self.feed_flow * self.feed    # component fraction on first tower (T0)
  50.         self.comp_eq = sp.array([self.xylene, self.styrene,
  51.                                  self.toluene, self.benzene]) #components linear equations
  52.         self.solve= sp.array(linalg.solve(self.comp_eq, T0_comp_frac))
  53.         self.D = self.solve[0] + self.solve[1]
  54.         self.B = self.solve[2] + self.solve[3]
  55.    
  56.    
  57.        
  58. if __name__=="__main__":
  59.     solution=solution()
  60.     solution.comp()
  61.     print "*" * 80
  62.     percent = 0.01
  63.     solution2=solution2(0.01)
  64.     solution2.comp()


que estoy haciendo mal porque la segunda clase no hereda los parametros de la clase superior???