Ülevaade abstraktsest klassist Pythonis

Abstraktsed klassid on klassid, mis on deklareeritud, kuid ei sisalda rakendusi. Seda saab ainult pärida. Abstraktsed klassid töötavad alaklasside mallina. Abstraktseid klasse ei saa kiirendada ja abstraktsete meetodite rakendamiseks on vaja alamklasse. Abstraktsete meetodite rakendamiseks, mis on määratletud abstraktsetes klassides, on vaja alamklasse. Abstraktsed klassid sisaldavad ühte või mitut abstraktset meetodit. Abstraktsed meetodid on meetodid, mis deklareeritakse ilma igasuguse teostuseta. Me ei saa otseselt luua abstraktse klassi objekti, kuid saame selle pärida põhiklassile ja seejärel objekti luua. Selles teemas õpime Pythoni abstraktklassist.

Abstraktsesse klassi võivad kuuluda nii abstraktne klass kui ka betooniklass. Abstraktse klassi abil saame määratleda meetodite üldise struktuuri, ilma et oleks ette nähtud iga meetodi täielikku rakendamist. Abstraktses klassis määratletud abstraktsetel meetoditel üldjuhul puudub põhiosa, kuid abstraktsetes klassides on võimalik kasutada abstraktseid meetodeid, mille abstraktne klass on rakendatav ja kui mõni alamklass tuleneb sellisest abstraktsest klassist, tuleb pakkuda selliste meetodite rakendusi. . Kui tuletatud klass ei rakenda mõnda abstraktset meetodit, siis loob see vea. Abstraktset klassiobjekti ei saa otseselt luua, kuid kui me kasutame seda abstraktset klassi teatud funktsioonide pakkumiseks põhiklassile või lasteklassile, saab ta seda teha, luues põhiklassi objekti.

Abstraktsete klasside tähtsus

1. See pakub põhiklasside vaikimisi funktsioone.

2. See määratleb alamklasside komplekti jaoks ühise API, mis on kasulik juhul, kui kolmas osapool pakub rakenduses pistikprogramme.

3. Kasulik suures kirjas oli paljude klasside meeldejätmine keeruline.

Süntaks

From abc import ABC
Class Educba(ABC):

Mis tahes klassi abstraktseks klassiks pidamiseks peab klass pärima ABC-metaklassi pythoni sisseehitatud abc-moodulist. abc moodul impordib metaklassi ABC.

Abstraktsed meetodid Pythonis

Abstraktsed meetodid on meetodid, mis deklareeritakse ilma igasuguse teostuseta.

Süntaks

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

Abstraktsete meetodite määratlemiseks abstraktses klassis tuleb meetodit kaunistada märksõnaga @ab Abstractmethod decorator. Dekoraator @ab abstractmethod tuleb importida pythoni sisseehitatud teegist nimega abc.

Kuidas abstraktsed klassid Pythonis toimisid?

Pythonil ei ole vaikimisi abstraktseid klasse, kuid sellel on moodul või raamatukogu, mis on aluseks abstraktsete baasklasside (ABC) määratlemiseks ja selle mooduli nimeks on ABC. See tähistab põhiklassi meetodit kui abstraktset põhiklassi ja seejärel valmistatakse konkreetsed klassid abstraktse baasi teostusena. Meetodist saab abstraktseks meetodiks dekoraatori märksõna abil @ab Abstractmethod.

Moodulit ABC kasutatakse abstraktsete klasside loomiseks; @ abstractmethod on dekoraator, mida kasutatakse meetodi abstraktseks kuulutamiseks. Moodul ABC moodustab lepingu põhiklassi ja betooniklassi vahel.

Abc-moodul annab aluse abstraktsete alusklasside (ABC) määratlemiseks Pythonis. Kogumoodulil on mõned konkreetsed klassid, mis on tuletatud ABC-st ja neid saab veelgi jagada. Peale kõigi nende sisaldab kogumismoodul ka mõnda ABC-d, mille abil saab testida, kas klass või eksemplar pakub kindlat liidest või mitte.

See moodul pakub järgmist klassi:

klass abc.ABCMeta

Metaklassi kasutatakse abstraktsete põhiklasside (ABC) määratlemiseks

Abstraktse põhiklassi loomiseks kasutame metaklassi.

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

Näide

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

Väljund on saadud

See on konkreetne meetod

16

16

See on konkreetne meetod

8

12

Ülaltoodud näites on abstraktse klassi kuju Shape, mis sisaldab ühte konkreetset meetodit, mida nimetatakse tavaliseks, ja kahte abstraktset meetodit, mida nimetatakse alaks ja perimeetriks. Seal on kaks lapseklassi ruutu ja ristkülikut, mis pärivad abstraktse klassi kuju ja rakendavad abstraktset meetodit.

Rakendamine alaklasside kaudu:

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

Abstraktsed omadused

Abstraktsed klassid sisaldavad abstraktseid atribuute koos abstraktsete meetoditega, mille määratleb @ab abstrakti.

Nüüd saame abstraktsete klassidega kasutada kinnisvara, property.getter (), property.setter () ja property.deleter ().

Süntaks

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

See määratleb kirjutuskaitstud atribuudi.

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)

Väljund:

Abstraktse klassi kuju ei saa koheseerida abstraktse meetodiga

Ruutklass

Järeldus

Lõpuks jõuan järeldusele, et abstraktne klass on viis koodikvaliteedi teatud taseme tagamiseks, kuna need jõustavad teatud standardeid ja võivad vähendada meie kirjutatava duplikaadi arvu. See loob ühenduse põhiklassi ja betoonklassi vahel. See pakub koodi hõlpsat rakendamist. See määratleb meetodite üldise struktuuri ilma selle täieliku rakendamiseta. See teeb programmeerija elu lihtsaks, abstraheerides taustal toimuvat ja pannes nad keskenduma ainult olulistele punktidele. See muudab uurimistöö ja arusaadavuse palju kiiremaks, kui mõista klassides levinud ja lihtsat klasside ülesehitust.

Soovitatavad artiklid

See on juhend Pythoni abstraktsest klassist. Siin räägime sellest, kuidas abstraktsed klassid Pythonis toimivad, koos olulisuse ja meetoditega koos sobivate näidetega. Võite lisateabe saamiseks vaadata ka järgmisi artikleid -

  1. Pythoni failioperatsioonid
  2. Kapseldamine Pythonis
  3. Silmused Pythonis
  4. Konstruktor Pythonis
  5. Pythoni komplektid
  6. Sissejuhatus PHP abstraktsesse klassi

Kategooria: