Pregled abstraktnega razreda v Pythonu

Abstraktni razredi so razredi, ki so deklarirani, vendar ne vsebujejo izvedb. Podeduje se lahko le. Izvlečki pouka delujejo kot predloga za podrazrede. Abstraktnih razredov ni mogoče instancirati in za podklase so potrebne izvedbe abstraktnih metod. Podklasi potrebujejo izvedbo abstraktnih metod, ki so opredeljene v abstraktnih razredih. Izvlečki pouka vsebujejo eno ali več abstraktnih metod. Abstraktne metode so metode, ki so deklarirane brez izvedb. Predloga abstraktnega razreda ne moremo neposredno ustvariti, lahko pa podedujemo v osnovni razred in nato ustvarimo predmet. V tej temi bomo spoznali abstraktni razred v Pythonu.

V razredu Abstrakt lahko vsebuje tako abstraktni razred kot tudi konkreten razred. Z uporabo abstraktnega razreda lahko določimo posplošeno strukturo metod, ne da bi zagotovili popolno izvedbo vsake metode. Abstraktne metode, ki so opredeljene v abstraktnem razredu, običajno nimajo telesa, vendar je možno imeti abstraktne metode z izvedbami v abstraktnem razredu, in če iz tega abstraktnega razreda izhaja katerikoli podrazred, je treba zagotoviti izvedbo takšnih metod . Če izpeljani razred ne izvede nobene abstraktne metode, potem bo vrgel napako. Objekta abstraktnih razredov ni mogoče neposredno ustvariti, vendar če ta abstraktni razred uporabimo za zagotavljanje določenih funkcionalnosti osnovnemu razredu ali otroškemu razredu, lahko to storimo tako, da ustvarimo predmet osnovnega razreda.

Pomen izvlečkov

1. Omogoča privzeto funkcionalnost osnovnih razredov.

2. Določa skupni API za nabor podrazredov, uporaben, kadar v aplikacijo ponuja vtičnike tretja oseba.

3. Koristno pri veliki kodi je bilo spominjanje na številne razrede težko.

Sintaksa

From abc import ABC
Class Educba(ABC):

Če želite kateri koli razred obravnavati kot abstrakten razred, mora razred podedovati ABC metaklaso iz vgrajenega abc modula python. abc modul uvozi metaklazo ABC.

Abstraktne metode v Pythonu

Abstraktne metode so metode, ki so deklarirane brez izvedb.

Sintaksa

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

Za definiranje abstraktnih metod v abstraktnem razredu mora biti metoda okrašena s ključno besedo, imenovano @ab абстрактmethod decorator. Dekorater @abriefmethod je treba uvoziti iz vgrajene knjižnice pytona, imenovane abc.

Kako so abstraktni razredi delovali v Pythonu?

Python privzeto nima abstraktnih razredov, vendar ima modul ali knjižnico, ki tvori osnovo za definiranje abstraktnih osnovnih razredov (ABC) in ime tega modula se imenuje ABC. Metodo osnovnega razreda označi kot abstraktni osnovni razred in nato ustvari konkretne razrede kot izvedbe abstraktne baze. Metoda se spremeni v abstraktno metodo s pomočjo ključne besede okrasitelja, imenovane @ab абстрактmethod.

ABC modul se uporablja za ustvarjanje abstraktnih razredov, @ Abstramethod je dekorater, ki se uporablja za razglasitev metode abstraktne. ABC modul vzpostavi pogodbo med osnovnim in betonskim razredom.

Abc modul je osnova za definiranje abstraktnih osnovnih razredov (ABC) v Pythonu. Zbirni modul ima nekaj konkretnih razredov, ki izhajajo iz ABC in jih je mogoče nadalje razdeliti. Poleg vseh teh modulov zbirke vsebuje tudi nekaj ABC, s pomočjo katerega lahko preizkusimo, ali razred ali primerek ponuja določen vmesnik ali ne.

Ta modul ponuja naslednji razred:

razred abc.ABCMeta

Metaklasa se uporablja za definiranje abstraktnih osnovnih razredov (ABC)

Za ustvarjanje abstraktnega osnovnega razreda uporabljamo metaklaso.

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

Primer

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

Dobljeni rezultat

To je konkretna metoda

16

16

To je konkretna metoda

8

12

V zgornjem primeru je razred Abstrakt Oblika, ki vsebuje eno konkretno metodo, imenovano skupna, in dve abstraktni metodi, imenovani območje in obod. Obstajata dve otroški razredi kvadrat in pravokotnik, ki podedujeta abstraktni razred Oblika in izvajata abstraktno metodo.

Izvajanje prek podrazreda:

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

Izvleček lastnosti

Abstraktni razredi vsebujejo abstraktne lastnosti skupaj z abstraktnimi metodami, ki jih definira @abriefproperty.

Zdaj lahko uporabljamo lastnosti, property.getter (), property.setter () in property.deleter () z abstraktnimi razredi.

Sintaksa

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

To določa lastnost samo za branje.

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)

Izhod:

Abstraktnega razreda ni mogoče oblikovati z območjem abstraktnih metod

Kvadratni razred

Sklep

Na koncu zaključim, da je abstraktni razred način, kako zagotoviti določeno raven kakovosti kode, saj uveljavijo določene standarde in lahko zmanjšajo količino podvojene kode, ki jo napišemo. Vzpostavi povezavo med osnovnim in betonskim razredom. Omogoča enostavno izvajanje kode. Opredeli posplošeno strukturo metod brez njegove popolne implementacije. Življenje programerja olajša z odvzemanjem ozadja in osredotočenjem le na pomembne točke. Raziskovanje in razumljivost bistveno hitreje izboljšata z razumevanjem skupne in preproste strukture razredov znotraj kode.

Priporočeni članki

To je vodnik za Abstraktni razred v Pythonu. Tukaj smo razpravljali o tem, kako abstraktni razredi delujejo v Pythonu s pomembnostjo in metodami z ustreznimi primeri. Za več informacij si lahko ogledate tudi naslednje članke -

  1. Operacije datotek Python
  2. Inkapsulacija v Pythonu
  3. Zanke v Pythonu
  4. Konstruktor v Pythonu
  5. Python Set
  6. Uvod v abstraktni razred PHP