Estudiando La Herencia Con Python 3

por | 10 febrero, 2014

Hola
En mi proceso de afianzar conocimientos basados en Python 3 he decidido ver cómo implementar la herencia con clases. Para ello he escrito un pequeño código que posee sus particularidades. En el código he creado una clase base llamada Figuras y en la que sólo defino 2 variables, que van a ser dos dimensiones de alguna figura plana. Después he definido clases que heredan de Figuras, como Rectangulo, Triangulo, Rombo, Trapecio, Paralelogramo y PolReg (polígono regular). En cada una de ellas se calculan cosas como su área y perímetro. Al tener un inicializador (constructor) en la clase Figuras para inicializar de igual manera en las otras clases he utilizado super().__init__(lista parámetros clase padre).
Lo cierto es que el código no tiene mucha complicación ya que con Python la escritura de código se simplifica y esquematiza mucho más que en cualquier otro lenguaje de programación; así que pongo aquí el código:

  1. #/usr/bin/env python3
  2. # -*- coding: utf-8 -*-
  3.  
  4.  
  5. from numpy import hypot, sqrt
  6.  
  7.  
  8. class Figuras(object):
  9.     __slots__ = ('dim1', 'dim2')
  10.  
  11.     def __init__(self, dim1, dim2):
  12.         self.dim1 = dim1
  13.         self.dim2 = dim2
  14.  
  15.     def area(self):
  16.         print(('El área de la figura no esta definida.'))
  17.  
  18.  
  19. class Rectangulo(Figuras):
  20.  
  21.     def __init__(self, dim1, dim2):
  22.         super().__init__(dim1, dim2)
  23.  
  24.     def area(self):
  25.         if self.dim1 != self.dim2:
  26.             print(('El área del rectángulo es: '))
  27.         else:
  28.             print(('El área del cuadrado es:'))
  29.         return(self.dim1 * self.dim2)
  30.  
  31.     def perimetro(self):
  32.         print(('El perímetro del rectángulo es: '))
  33.         return(2 * self.dim1 + 2 * self.dim2)
  34.  
  35.  
  36. class Triangulo(Figuras):
  37.     def __init__(self, dim1, dim2, base, altura):
  38.         super().__init__(dim1, dim2)
  39.         self.base = base
  40.         self.altura = altura
  41.  
  42.     def area(self):
  43.         print(('El área del triángulo es:'))
  44.         return((self.base * self.altura) / 2.)
  45.  
  46.     def perimetro(self):
  47.         print(('El perímetro del triángulo es: '))
  48.         return(self.dim1 + self.dim2 + self.base)
  49.  
  50.     def hipotenusa(self):
  51.         print(('La hipotenusa es: '))
  52.         return (hypot(self.base, self.altura))
  53.  
  54.  
  55. class Rombo(Figuras):
  56.     def __init__(self, dim1, d, D):
  57.         super().__init__(dim1, dim2=None)
  58.         self.d = d
  59.         self.D = D
  60.  
  61.     def area(self):
  62.         print(('El área del rombo es: '))
  63.         return ((self.d * self.D) / 2.)
  64.  
  65.     def perimetro(self):
  66.         print(('El perímetro del rombo es: '))
  67.         return (4 * self.dim1)
  68.  
  69.  
  70. class Trapecio(Figuras):
  71.     def __init__(self, dim1, dim2, altura, lateral):
  72.         super().__init__(dim1, dim2)
  73.         self.altura = altura
  74.         self.lateral = lateral
  75.  
  76.     def area(self):
  77.         print(('El área del Trapecio es:'))
  78.         return (self.altura * (self.dim1 + self.dim2) / 2.)
  79.  
  80.     def perimetro(self):
  81.         print(('El perímetro del trapecio es: '))
  82.         return (self.dim1 + self.dim2 + self.lateral)
  83.  
  84.  
  85. class Paralelogramo(Figuras):
  86.     def __init__(self, dim1, dim2, altura):
  87.         super().__init__(dim1, dim2)
  88.         self.altura = altura
  89.  
  90.     def area(self):
  91.         print(('El área del Paralelogramo es: '))
  92.         return (self.dim1 * self.altura)
  93.  
  94.     def perimetro(self):
  95.         print(('El perímetro del Paralelogramo es:'))
  96.         return(2 * (self.dim1 + self.dim2))
  97.  
  98.  
  99. class PolReg(Figuras):
  100.     def __init__(self, dim1, numlados, apotema):
  101.         super().__init__(dim1, dim2=None)
  102.         self.apotema = apotema
  103.         self.numlados = numlados
  104.  
  105.     def area(self):
  106.         print(('El área del Polígono regular de {} lados es: ').format(self.numlados))
  107.         return ((self.dim1 * self.numlados * self.apotema) / 2.)
  108.  
  109.     def perimetro(self):
  110.         print(('El perímetro del Polígono regular de {} lados es: ').format(self.numlados))
  111.         return (self.dim1 * self.numlados)
  112.  
  113.  
  114. def main():
  115.     F = Figuras(10, 10)
  116.     R = Rectangulo(9, 5)
  117.     T = Triangulo(10, 8, 5, 6)
  118.     R1 = Rombo(0.5 * sqrt(74.), 5, 7)
  119.     T1 = Trapecio(5, 7, 4, 3.5)
  120.     P = Paralelogramo(5, 8, 7)
  121.     P1 = PolReg(5.5, 8, 5)
  122.  
  123.     F.area()
  124.     print((R.area()))
  125.     print((R.perimetro()))
  126.     print((T.area()))
  127.     print((T.perimetro()))
  128.     print((R1.area()))
  129.     print((R1.perimetro()))
  130.     print((T1.area()))
  131.     print((T1.perimetro()))
  132.     print((P.area()))
  133.     print((P.perimetro()))
  134.     print((P1.area()))
  135.     print((P1.perimetro()))
  136.  
  137. if __name__ == '__main__':
  138.     main()

La salida del código:


El área de la figura no esta definida.
El área del rectángulo es:
45
El perímetro del rectángulo es:
28
El área del triángulo es:
15.0
El perímetro del triángulo es:
23
El área del rombo es:
17.5
El perímetro del rombo es:
17.2046505341
El área del Trapecio es:
24.0
El perímetro del trapecio es:
15.5
El área del Paralelogramo es:
35
El perímetro del Paralelogramo es:
26
El área del Polígono regular de 8 lados es:
110.0
El perímetro del Polígono regular de 8 lados es:
44.0

Saludos

Un pensamiento en “Estudiando La Herencia Con Python 3

  1. Pingback: Bitacoras.com

Los comentarios están cerrados.