Yleiskatsaus Pythonin abstraktista luokasta

Tiivistelmäluokat ovat luokkia, jotka on ilmoitettu, mutta jotka eivät sisällä toteutuksia. Se voidaan vain periä. Abstraktit luokat toimivat alaluokkien mallina. Abstraktit luokat eivät ole toteutettavissa ja vaativat alaluokkia toteuttamaan abstrakteja menetelmiä. Se tarvitsee alaluokat tarjoamaan abstraktien menetelmien, jotka on määritelty abstraktiluokissa, toteutuksia. Abstraktit luokat sisältävät yhden tai useamman abstraktin menetelmän. Tiivistelmämenetelmät ovat menetelmiä, jotka julistetaan ilman toteutuksia. Emme voi luoda suoraan abstraktin luokan objektia, mutta voimme periä perusluokalle ja sitten luoda objektin. Tässä aiheesta aiomme oppia abstraktista luokasta Pythonissa.

Sekä abstrakti luokka että betoni luokka voidaan sisällyttää abstraktiin luokkaan. Käyttämällä abstraktia luokkaa voimme määritellä menetelmien yleisen rakenteen tarjoamatta jokaisen menetelmän täydellistä toteutusta. Abstraktissa luokassa määritellyillä abstraktilla menetelmillä ei yleensä ole runkoa, mutta abstraktissa luokassa on mahdollista käyttää abstrakteja menetelmiä, joissa on toteutuksia, ja jos jokin alaluokka saadaan sellaisesta abstraktista luokasta, on tarjottava tällaisten menetelmien toteutus. . Jos johdettu luokka ei toteuta mitään abstraktia menetelmää, se heittää virheen. Abstraktia luokkaobjektia ei voida luoda suoraan, mutta kun käytämme tätä abstraktia luokkaa tiettyjen toimintojen tarjoamiseen perusluokalle tai lapsiluokalle, se voi tehdä sen luomalla perusluokan objektin.

Abstraktien luokkien merkitys

1. Se tarjoaa perusluokkien oletustoiminnot.

2. Se määrittelee alaluokkaryhmän yhteisen sovellusliittymän, joka on hyödyllinen silloin, kun kolmas osapuoli tarjoaa laajennuksia sovelluksessa.

3. Hyödyllinen isossa koodissa, että monien luokkien muistaminen on vaikeaa.

Syntaksi

From abc import ABC
Class Educba(ABC):

Jotta mitä tahansa luokkaa pidetään abstraktina luokana, luokan on perittävä ABC-metaklassi pythonin sisäänrakennetusta abc-moduulista. abc-moduuli tuo ABC-metaklassin.

Abstraktit menetelmät Pythonissa

Tiivistelmämenetelmät ovat menetelmiä, jotka julistetaan ilman toteutuksia.

Syntaksi

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

Jos haluat määritellä abstraktit menetelmät abstraktissa luokassa, menetelmä on koristeltava avainsanalla, jonka nimi on @abstraktimetikkakoriste. @Ab Abstractmethod -dekoraattori on tuotava pythonin sisäänrakennetusta kirjastosta, nimeltään abc.

Kuinka abstraktit luokat toimivat Pythonissa?

Pythonilla ei ole oletuksena abstrakteja luokkia, mutta siinä on moduuli tai kirjasto, joka muodostaa perustan abstraktien perusluokkien (ABC) määrittämiselle, ja moduulin nimeä kutsutaan ABC. Se merkitsee perusluokan menetelmää abstraktina perusluokana ja tuottaa sitten konkreettiset luokat abstraktin perustason toteutuksina. Menetelmä muuttuu abstraktiksi menetelmäksi koriste-avainsanan avulla, nimeltään @abstraktimetodi.

ABC-moduulia käytetään abstraktien luokkien luomiseen. @ Abstractmethod on sisustaja, jota käytetään ilmoittamaan menetelmä abstraktiksi. ABC-moduuli muodostaa sopimuksen perusluokan ja betoniluokan välillä.

Abc-moduuli tarjoaa perustan abstraktien perusluokkien (ABC) määrittelemiselle Pythonissa. Kokoelmoduulissa on joitain ABC: stä johdettuja konkreettisia luokkia ja ne voidaan jakaa edelleen. Kaikkien näiden lisäksi kokoelmamoduuli sisältää myös joitain ABC: tä, joita voidaan käyttää testaamaan, tarjoaako luokka tai ilmentymä tietyn rajapinnan.

Tämä moduuli tarjoaa seuraavan luokan:

luokka abc.ABCMeta

Metaklassia käytetään abstraktien perusluokkien (ABC) määrittelemiseen

Käytämme metaklassia luodaksesi abstraktin perusluokan.

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

esimerkki

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

Tuotos saatu

Tämä on konkreettinen menetelmä

16

16

Tämä on konkreettinen menetelmä

8

12

Yllä olevassa esimerkissä tiivistelmäluokka on muoto, joka sisältää yhden konkreettisen menetelmän, jota kutsutaan yleiseksi, ja kaksi abstraktia menetelmää, nimeltään alue ja kehä. Kaksi lapsiluokkaa on neliö ja suorakulmio, jotka perivät abstraktin luokan muodon ja toteuttavat abstraktin menetelmän.

Toteutus alaluokituksen kautta:

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

Abstraktit ominaisuudet

Abstraktit luokat sisältävät abstraktit ominaisuudet sekä @ab Abstractproperty määrittelemät abstraktit menetelmät.

Voimme nyt käyttää omaisuutta, property.getter (), property.setter () ja property.deleter () abstraktien luokkien kanssa.

Syntaksi

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

Tämä määrittelee vain luku -ominaisuuden.

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)

lähtö:

Abstraktin luokan muotoa ei voida jäljitellä abstraktilla menetelmäalueella

Neliöluokka

johtopäätös

Lopuksi totean, että abstrakti luokka on tapa varmistaa tietynlainen koodin laatu, koska ne noudattavat tiettyjä standardeja ja voivat vähentää kirjoittamasi kaksoiskappaleen määrää. Se luo yhteyden perusluokan ja betoniluokan välillä. Se tarjoaa koodin helpon toteutuksen. Se määrittelee menetelmien yleisen rakenteen ilman niiden täydellistä toteuttamista. Se tekee ohjelmoijan elämästä helpon abstrahimalla taustaprosessin ja tekemällä he keskittymään vain tärkeisiin kohtiin. Se tekee tutkimuksesta ja ymmärrettävyydestä huomattavasti nopeamman ymmärtämällä koodin luokkien yleisen ja yksinkertaisen rakenteen.

Suositellut artikkelit

Tämä on opas tiivistelmäluokkaan Pythonissa. Tässä keskustellaan siitä, kuinka abstraktit luokat toimivat Pythonissa, tärkeys ja menetelmät sopivien esimerkkien avulla. Saatat myös katsoa seuraavia artikkeleita saadaksesi lisätietoja -

  1. Python-tiedostot
  2. Kapselointi Pythoniin
  3. Silmukoita Pythonissa
  4. Rakentaja Pythonissa
  5. Python-sarjat
  6. Johdatus abstraktiluokkaan PHP: ssä