En este tutorial, discutiremos el concepto de abstracción en Python para un enfoque de programación orientada a objetos.
Esencialmente, la abstracción se enfoca en ocultar las implementaciones internas de un proceso o método del usuario. Así, el usuario sabe lo que está haciendo, pero no sabe cómo se está haciendo el trabajo.
& nbsp;
¿Qué es la abstracción en Python?
Por ejemplo, la gente no piensa en un automóvil como una colección de miles de piezas individuales. En cambio, lo ven como un objeto bien definido con su propio comportamiento único. Esta abstracción permite a las personas conducir un automóvil sin ser conscientes de la complejidad de las partes que lo componen. Pueden ignorar los detalles de la transmisión del motor y los sistemas de frenado. En cambio, pueden usar todo el objeto.
Una forma poderosa de manipular la abstracción y el uso de la clasificación jerárquica. Esto nos permite superponer la semántica de sistemas complejos, dividiéndolos en partes más manejables. Afuera, el automóvil es un solo objeto. Una vez dentro, ves que el coche consta de varios subsistemas: dirección, frenos, sistema de audio, cinturones de seguridad, etc. A su vez, cada uno de estos subsistemas consta de bloques más pequeños.
La cuestión es que conducimos un automóvil (o cualquier otro sistema complejo) usando abstracciones jerárquicas.
Esto también se puede aplicar a programas de computadora usando conceptos OOP. Esta es la esencia de la Programación Orientada a Objetos.
Clases y Métodos Abstractos en Python
Para declarar una clase abstracta, primero necesitamos importar el módulo abc
. Echemos un vistazo a un ejemplo.
from abc import ABC class abs_class (ABC): #métodos abstractos
Aquí abs_class
&es un resumen clase dentro de la cual se pueden definir métodos abstractos o cualquier otro método.
Como propiedad, las clases abstractas pueden tener cualquier número de métodos abstractos, coexistiendo con cualquier número de otros métodos. Por ejemplo, podemos ver a continuación.
from abc import ABC, abstractmethod class abs_class (ABC): #método normal def method (self): # definición de método @abstractmethod def Abs_method (self): #Abs_method definición
Aquí method ()
&método normal, mientras que Abs_method ()
&un método abstracto que implementa el @abstractmethod
del módulo abc.
Ejemplo
Ahora que conocemos las clases y métodos abstractos, echemos un vistazo a un ejemplo.
from abc import ABC, abstractmethod class Absclass (ABC): def print (self, x): print ("Valor pasado:", x) @abstractmethod def task (self): print ("Estamos dentro de la tarea Absclass") class test_class (Absclass): def task (self): print ("Estamos dentro de la tarea test_class") class example_class (Absclass): def task (self): print ("Estamos dentro de la tarea clase_ejemplo") #objeto de clase_ejemplo creado obj_prueba = clase_prueba () obj_prueba.tarea () obj_prueba.print (100) #objeto de clase_ejemplo creado obj_ejemplo = clase_ejemplo () ejemplo_obj.tarea ( ) example_obj .print (200) print ("test_obj es una instancia de Absclass?", isinstance (test_obj, Absclass)) print ("example_obj es una instancia de Absclass?", isinstance (example_obj, Absclass))
Salida:
dónde,
task ()
abstracto y el método print ()
que son visibles para el usuario. Las otras dos clases heredadas de esta clase abstracta son &estas son test_class
y example_class
. Ambos tienen su propio método task()
(una extensión de método abstracto).
Después de que el usuario crea objetos de las clases test_class y example_class y llama al método task()
para ambos, entran en juego las definiciones ocultas del método task ()
dentro de ambas clases. Estas definiciones están ocultas para el usuario. El método abstracto task ()
de la clase abstracta Absclass
nunca se llama realmente.
Pero cuando print()
se llama como para test_obj y example_obj, se llama al método print()
Absclass porque no es un método abstracto.
Nota: no podemos instanciar una clase abstracta . Esto provoca un error.