Descripción general de la clase abstracta en Python

Las clases abstractas son las clases que se declaran pero no contienen implementaciones. Solo puede ser heredado. Las clases abstractas funcionan como una plantilla para las subclases. Las clases abstractas no se pueden instanciar y requieren subclases para proporcionar implementaciones para métodos abstractos. Necesita subclases para proporcionar implementaciones de los métodos abstractos que se definen en las clases abstractas. Las clases abstractas contienen uno o más métodos abstractos. Los métodos abstractos son los métodos que se declaran sin implementaciones. No podemos crear directamente el objeto de la clase abstracta, pero podemos heredar a la clase base y luego crear el objeto. En este tema, vamos a aprender sobre la clase abstracta en Python.

Tanto la clase abstracta como la clase concreta pueden estar contenidas en la clase Resumen. Al usar una clase abstracta, podemos definir una estructura generalizada de los métodos sin proporcionar implementaciones completas de cada método. Los métodos abstractos que se definen en la clase abstracta generalmente no tienen el cuerpo, pero es posible tener métodos abstractos con implementaciones en la clase abstracta y si alguna subclase se deriva de dicha clase abstracta debe proporcionar la implementación de dichos métodos. . Si la clase derivada no implementa ningún método abstracto, arrojará un error. El objeto de clase abstracta no se puede crear directamente, pero cuando usamos esta clase abstracta para proporcionar ciertas funcionalidades a una clase base o clase secundaria, puede hacerlo creando el objeto de la clase base.

Importancia de las clases abstractas

1. Proporciona la funcionalidad predeterminada de las clases base.

2. Define una API común para el conjunto de subclases, útil cuando un tercero proporciona complementos en una aplicación.

3. Útil en código grande recordar que muchas clases es difícil.

Sintaxis

From abc import ABC
Class Educba(ABC):

Para considerar cualquier clase como una clase abstracta, la clase debe heredar la metaclase ABC del módulo abc incorporado de python. El módulo abc importa la metaclase ABC.

Métodos abstractos en Python

Los métodos abstractos son los métodos que se declaran sin implementaciones.

Sintaxis

from abc import ABC, abstract method
Class Educba(ABC):
@abstractmethod
def mymethod(self):
#empty body
pass

Para definir los métodos abstractos en una clase abstracta, el método debe estar decorado con una palabra clave llamada @abstractmethod decorator. El decorador @abstractmethod debe importarse desde la biblioteca incorporada de Python llamada abc.

¿Cómo funcionaban las clases abstractas en Python?

Python no tiene clases abstractas por defecto, pero tiene un módulo o biblioteca que forma la base para definir las clases de base abstracta (ABC) y ese nombre de módulo se llama ABC. Marca el método de la clase base como la clase base abstracta y luego produce clases concretas como implementaciones de la base abstracta. Un método se convierte en un método abstracto con la ayuda de una palabra clave decoradora llamada @abstractmethod.

El módulo ABC se utiliza para crear las clases abstractas, @ abstractmethod es el decorador utilizado para declarar el método abstract. El módulo ABC establece un contrato entre la clase base y la clase concreta.

El módulo abc proporciona la base para definir clases base abstractas (ABC) en Python. El módulo de colecciones tiene algunas clases concretas que se derivan de ABC y se pueden dividir aún más. Además de todo esto, el módulo de colecciones también contiene algunos ABC que se pueden usar para probar si una clase o instancia proporciona una interfaz particular o no.

Este módulo proporciona la siguiente clase:

clase abc.ABCMeta

La metaclase se utiliza para definir clases base abstractas (ABC)

Usamos una metaclase para crear una clase base abstracta.

from abc import ABCMeta
class C:
__metaclass__ = ABCMeta
MyABC.register(tuple)
assert issubclass(tuple, C)
assert isinstance((), C)

Ejemplo

# importing the ABC module
from abc import ABC, abstractmethod
class Shape(ABC):
def common(self):
print("This is a concrete method")
@abstractmethod # decorator
def area(self):
pass
@abstractmethod
def perimeter(self):
pass
class Square(Shape):
def __init__(self, side):
self.__side=side
def area(self):
return self.__side*self.__side
def perimeter(self):
return 4*self.__side
class Rectangle(Shape):
def __init__(self, length, breath):
self.__length=length
self.__breath=breath
def area(self):
return self.__length*self.__breath
def perimeter(self):
return 2*(self.__length+self.__breath)
S1=Square(4)
print(S1.common())
print(S1.area())
print(S1.perimeter())
R1=Rectangle(2, 4)
print(R1.common())
print(R1.area())
print(R1.perimeter())

Salida obtenida

Este es un método concreto

dieciséis

dieciséis

Este es un método concreto

8

12

En el ejemplo anterior, la clase Resumen es Forma, que contiene un método concreto llamado común y dos métodos abstractos llamados área y perímetro. Hay dos clases secundarias Cuadrado y Rectángulo que heredan la clase abstracta Forma e implementan el método abstracto.

Implementación a través de subclases:

import abc
class Shape:
def area(self):
pass
class Square(Shape):
def area(self):
print("Square is a child class")
print( issubclass(Square, Shape))
print( isinstance(Square(), Shape))

Propiedades abstractas

Las clases abstractas contienen propiedades abstractas junto con métodos abstractos definidos por @abstractproperty.

Ahora podemos usar property, property.getter (), property.setter () y property.deleter () con clases abstractas.

Sintaxis

class class_name(ABC):
@property
@abstractmethod
Def method(self):

Esto define la propiedad de solo lectura.

class Class_name:
__metaclass__ = ABCMeta
def getx(self): …
def setx(self, value): …
x = abstractproperty(getx, setx)

Python 2

class C(ABC):
@abstractproperty
def my_abstract_property(self):

Python 3.3

class C(ABC):
@property
@abstractmethod
def my_abstract_property(self):
import abc
from abc import ABC, abstractmethod
class Shape(ABC):
@abc.abstractproperty
def area(self):
return "Shape class"
class Square(parent):
@property
def area(self):
return "Square class"
try:
s1 =Shape()
print( s1.area)
except for Exception as err:
print (err)
s1 = Square()
print (s1.area)

Salida:

No se puede crear una instancia de clase abstracta Forma con área de método abstracto

Clase cuadrada

Conclusión

Finalmente, concluyo que la clase abstracta es una forma de garantizar un cierto nivel de calidad de código porque imponen ciertos estándares y pueden reducir la cantidad de código duplicado que escribimos. Establece una conexión entre la clase base y la clase concreta. Proporciona una implementación fácil de código. Define una estructura generalizada de métodos sin su implementación completa. Facilita la vida del programador al abstraer el proceso de fondo y hacer que se centre solo en puntos importantes. Hace que la investigación y la comprensibilidad sean mucho más rápidas al comprender la estructura común y simple de las clases dentro del código.

Artículos recomendados

Esta es una guía para la clase abstracta en Python. Aquí discutimos cómo funcionan las clases abstractas en Python con la importancia y los métodos con ejemplos apropiados. También puede echar un vistazo a los siguientes artículos para obtener más información:

  1. Operaciones de archivo de Python
  2. Encapsulación en Python
  3. Bucles en Python
  4. Constructor en Python
  5. Conjuntos de Python
  6. Introducción a la clase abstracta en PHP