Översikt av Abstract Class i Python

Abstrakta klasser är de klasser som deklareras men innehåller inga implementationer. Det kan bara ärvas. Abstrakta klasser fungerar som en mall för underklasserna. Abstrakta klasser kan inte instanseras och kräver underklasser för att ge implementationer för abstrakta metoder. Den behöver underklasser för att tillhandahålla implementeringar av de abstrakta metoderna som definieras i abstrakt klasser. Abstrakta klasser innehåller en eller flera abstrakta metoder. Abstrakta metoder är de metoder som deklareras utan implementeringar. Vi kan inte direkt skapa objektet för abstrakt klass men vi kan ärva till basklassen och sedan skapa objektet. I det här ämnet kommer vi att lära oss om abstrakt klass i Python.

Såväl den abstrakta klassen som den konkreta klassen kan ingå i klassen Abstrakt. Genom att använda en abstrakt klass kan vi definiera en generaliserad struktur av metoderna utan att tillhandahålla fullständiga implementeringar av varje metod. Abstrakta metoder som definieras i den abstrakta klassen har i allmänhet inte kroppen, men det är möjligt att ha abstrakta metoder med implementeringar i den abstrakta klassen och om någon underklass hämtas från sådana abstrakta klasser behöver de tillhandahålla implementeringen för sådana metoder . Om någon abstrakt metod inte implementeras av den härledda klassen kommer den att kasta ett fel. Det abstrakta klassobjektet kan inte skapas direkt, men när vi använder denna abstrakta klass för att ge vissa funktioner till en basklass eller barnklass kan det göra det genom att skapa objektet för basklassen.

Betydelsen av abstrakta klasser

1. Det ger standardfunktionen för basklasserna.

2. Den definierar ett gemensamt API för uppsättningen av underklasser, användbara när en tredje part tillhandahåller plugins i en applikation.

3. Hjälpsam med stor kod att komma ihåg att många klasser är svårt.

Syntax

From abc import ABC
Class Educba(ABC):

För att betrakta varje klass som en abstrakt klass måste klassen ärva ABC-metaklass från den inbyggda abc-modulen Python. abc-modulen importerar ABC-metaklass.

Abstrakta metoder i Python

Abstrakta metoder är de metoder som deklareras utan implementeringar.

Syntax

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

För att definiera de abstrakta metoderna i en abstrakt klass måste metoden dekoreras med ett nyckelord som heter @abstractmethod dekoratör. @Abstractmethod-dekoratören måste importeras från det inbyggda pytonbiblioteket som kallas abc.

Hur fungerade Abstract Classes i Python?

Python har inte abstrakta klasser som standard, men har en modul eller bibliotek som utgör basen för att definiera abstrakta basklasser (ABC) och det modulnamnet kallas ABC. Den markerar metod för basklassen som den abstrakta basklassen och producerar sedan konkreta klasser som implementationer av den abstrakta basen. En metod förvandlas till en abstrakt metod med hjälp av ett dekoratörsnyckel som heter @abstractmethod.

ABC-modulen används för att skapa abstrakta klasser, @ abstractmethod är dekoratören som används för att förklara metoden abstrakt. ABC-modulen upprättar ett kontrakt mellan basklassen och betongklassen.

Abc-modulen ger grunden för att definiera abstrakta basklasser (ABC) i Python. Samlingsmodulen har några konkreta klasser som härrör från ABC och de kan delas vidare. Bortsett från alla dessa innehåller samlingsmodulen också en del ABC som kan användas för att testa om en klass eller instans ger ett visst gränssnitt eller inte.

Denna modul tillhandahåller följande klass:

klass abc.ABCMeta

Metaklasset används för att definiera abstrakta basklasser (ABC)

Vi använder en metaklass för att skapa en abstrakt basklass.

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

Exempel

# 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())

Output uppnås

Detta är en konkret metod

16

16

Detta är en konkret metod

8

12

I exemplet ovan är klassen Abstrakt form som innehåller en konkret metod som kallas vanliga och två abstrakta metoder som kallas area och perimeter. Det finns två barnklasser kvadrat och rektangel som ärver den abstrakta klassen form och implementerar den abstrakta metoden.

Implementering genom underklassning:

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))

Abstrakta egenskaper

Abstrakta klasser innehåller abstrakta egenskaper tillsammans med abstrakta metoder definierade av @abstractproperty.

Vi kan nu använda egendom, property.getter (), property.setter () och property.deleter () med abstrakta klasser.

Syntax

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

Detta definierar den skrivskyddade egenskapen.

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)

Produktion:

Kan inte initiera abstrakt klassform med abstrakt metodområde

Fyrkantig klass

Slutsats

Till sist drar jag slutsatsen att abstrakt klass är ett sätt att säkerställa en viss kodkvalitet eftersom de upprätthåller vissa standarder och kan minska mängden dubblettkod som vi skriver. Det skapar en koppling mellan basklassen och betongklassen. Det ger en enkel implementering av kod. Den definierar en generaliserad metodstruktur utan dess fullständiga implementering. Det gör programmerarens liv lätt genom att abstrahera bakgrundsprocessen och få dem att fokusera endast på viktiga punkter. Det gör forskningen och förståelsen mycket snabbare genom att förstå den gemensamma och enkla strukturen för klasser inom koden.

Rekommenderade artiklar

Detta är en guide till Abstract Class i Python. Här diskuterar vi hur fungerar abstrakt klasser i Python med vikten och metoderna med lämpliga exempel. Du kan också titta på följande artiklar för att lära dig mer -

  1. Python-filoperationer
  2. Inkapsling i Python
  3. Loops i Python
  4. Konstruktör i Python
  5. Python-uppsättningar
  6. Introduktion till abstrakt klass i PHP

Kategori: