Estudiando La Herencia Con Python 3

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

Pingbacks/Trackbacks

  1. Bitacoras.com - 10 febrero, 2014

    Información Bitacoras.com

    Valora en Bitacoras.com: 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 c…

Comments are closed.

Proudly powered by WordPress   Premium Style Theme by www.gopiplus.com