Python

Pythoni kirjeldajate õpetus

Pythoni kirjeldajate õpetus
Klasside vahel taaskasutada võiva üldkoodi kirjutamise kasulikku tehnikat toetab Pythoni deskriptorid või laiemalt tuntud kui deskriptorid. Need võivad kõlada pärimise mõiste lähedal, kuid pole nii. See on otsene tehnika siduva iseloomuga atribuutidele juurdepääsu saamiseks. Kirjeldajad on Pythoni põhifunktsioon, mis juhib paljusid nõidusi, varjatud keele katte all. Kui olete kunagi tundnud, et väheste funktsionaalsete rakendustega Pythoni deskriptorid on edasijõudnud teema, on see õpetus ülim platvorm, et teid sellest võimsast funktsioonist aru.

Kirjeldajate meetodid

Selgelt öeldes klass, kes rakendab __get_ (), __set () _, või __kustuta () _ objekti kirjeldajaprotokolli funktsioon liigitatakse kirjeldajaks. Objekti viitena kasutavate erinevate klasside parameetrite reguleerimiseks koostatakse Pythoni kirjeldajad. Siin on kolm täpsustatud meetodit, mida kasutatakse deskriptorites:

__get __ (): Kui proovite andmeid välja tõmmata, kuvatakse __get __ () atribuuti nimetatakse ja ükskõik, mis see ka pakub, antakse kood, mis nõuab ühe muutuja väärtust. See on liigitatud mitteandmete kirjeldajaks ja on ainult loetav.

__set __ (): Funktsioon __set __ () kutsutakse parameetri väärtuste reguleerimiseks ja see funktsioon ei tagasta teile midagi. Seda tuntakse kui andmete kirjeldajat, mis pole mitte ainult loetav, vaid ka kirjutatav.

__kustuta __ (): Kui parameeter objektilt eemaldatakse, kuvatakse __kustuta __ () funktsiooni nimetatakse. Seda tuntakse kui andmete kirjeldajat, mis pole mitte ainult loetav, vaid ka kirjutatav.

Kirjeldajaprotokoll tuleb jõustada ainult siis, kui kasutate oma skriptis Pythoni kirjeldajaid. Protokolli kõige olulisemad funktsioonid on saada () ja komplekt () millel on järgmine allkiri.

__get __ (ise, obj, tüüp = Puudub) -> objekt
__set __ (ise, obj, väärtus) -> Puudub

ise on kirjeldaja eksemplar.
obj on objekti objekt, millega teie deskriptor on ühendatud.
tüüp on objekti tüüp.

Näide:

Siin oleme määranud kaks klassi. Klassikirjelduses oleme määratlenud kirjeldusmeetodid. Aastal saada () meetod, ise on kirjeldaja 'val' eksemplar, see saab väärtuse 'Geeks' ja salvestab selle. Siis teeb see stringi, millele lisatud atribuudi vahele on kinnitatud "for". klassi kirjeldaja (objekt):

def __get __ (ise, obj, objekti tüüp):
tagastage „ for ”.vorming (ise.val, ise.val)

Seejärel naaseb väärtus meetodile set (). Seejärel kontrollib see funktsioon väärtust, olgu see string või mitte. Kui väärtus on string, salvestatakse see atribuudi nimega 'val'. Kui väärtus pole string, loob see erandi.

def __set __ (ise, obj, val):
kui oninstants (val, str):
ise.val = val
muu:
tõsta TypeError ("Nimi peaks olema string")

Pärast seda trükitakse väärtus stringina "GeeksforGeeks".

klass GFG (objekt):
val = deskriptor ()
g = GFG ()
g.val = "Geeks"
print (g.val)

Selle koodi käivitamisel kuvatakse järgmine väljund:

GeeksforGeeks

Kirjeldajate eesmärk

Kirjeldame klassi nimega „kodu”, millel on kolm omadust, nimelt: loc, area ja price. Võite funktsiooni kasutada __selles__() klassi atribuutide initsialiseerimiseks.

klassi kodu:

def __init __ (ise, loc, piirkond, hind):

Seejärel saate kasutada funktsiooni __str __ (), mis võib tagastada tulemuse kolmest atribuudist, mille võite üksuse ehitamisel klassile anda. Funktsioon __str __ () tagastab stringi.

Selle koodi käivitamisel kuvatakse selles näiliselt õige väljund.

Proovime nüüd muuta kodu hinna negatiivseks väärtuseks, nagu allpool näidatud, ja käivitame koodi.

Muutusi pole üldse, välja arvatud negatiivne märk, nagu on näidatud väljundis. Oota! Siin on midagi lahti, kas pole? Kuidas on kodu hind negatiivne. Python lubab seda, kuna Python on mitmekülgne arenduskeskkond, mis konkreetselt ei võimalda tüübikontrolli.

Initsialiseerime avalduse „kui” __selles__() funktsioon tõsta erandit, kui väärtus või hind on väiksem kui null.

Praeguse seisuga võite märgata, et see toimib hästi ja kui hind on väiksem kui null, tekitab kood väärtusevea.

Nagu me võime aru saada, __selles_() function on konstruktor ja seda kutsutakse ainult üks kord, kui teete klassiobjekti. Seetõttu ebaõnnestub kohandatud tüübikontroll hiljem. Python pakub kirjeldajaid, mis on spetsialiseerunud kõigi ülaltoodud probleemide lahendamisele. Alustame nüüd samas näites kirjeldajaid, et sellest hästi aru saada.

Kirjeldajate klass ' __selles_() Funktsiooni lokaalne muutuja __price on 0. Selle alguses tähendab topeltkriips, et parameeter on privaatne. Seda kasutatakse klassi klassi deskriptori hinna parameetri eristamiseks koduklassist.

The __get __ () meetod tagastab hinna. Atribuudi eksemplar sisaldab h1, mis on kirjeldav eksemplar. Atribuudi omanik viitab klassi nimele "kodu" ja tagastab hinna.

Funktsioon __set __ () on atribuut näiteks mis sisaldab h1 ja määratava väärtuse. Väärtuse kinnitamiseks kasutatakse tšeki. Kui väärtus on täisarv, prinditakse see välja, vastasel juhul visatakse tüübivea erandiga kood. Kui väärtus on alla nulli, visatakse koodi Error erand.

The __kustuta __ () funktsioon käivitatakse, kui parameetri atribuut eemaldatakse objektilt.

Koduklass jääb samaks, kuigi eksemplar hind lisatakse klassi Descriptor () klass. Aastal __selles_() funktsiooni, lisage eksemplari hinnale atribuut price ja see kutsub välja __set_ () funktsioon.

Selle koodi käitamise ajal annab see teile väärtuse tõrke, kuna hind ei saa kunagi olla null.

Nüüd proovige koodi käivitada stringi väärtusega.

See loob tüübivea erandi.

Olemasolev eksemplari väärtus tühistatakse uue eksemplari moodustamisel, kuna kirjeldajad on seotud klassi, mitte eksemplariga. Heitke pilk allpool:

Esimene väärtus on teisega tühistatud.

Järeldus

Me saame aru, miks Pythoni kirjeldajatest on saanud nii põnev teema ja millistesse kasutustsenaariumidesse saate neid lisada selle õpetuse kaudu.

Kuidas mängu Linuxis arendada
Kümme aastat tagasi ei osanud paljud Linuxi kasutajad ennustada, et nende lemmikoperatsioonisüsteem on ühel päeval populaarne kommertsvideomängude män...
Kommertsmängumootorite avatud lähtekoodiga sadamad
Tasuta, avatud lähtekoodiga ja platvormidevaheliste mängumootorite puhkusereise saab kasutada nii vanade kui ka mõnede üsna hiljutiste mängude pealkir...
Parimad Linuxi käsurea mängud
Käsurida pole Linuxi kasutamisel lihtsalt teie suurim liitlane - see võib olla ka meelelahutusallikas, sest saate seda kasutada paljude lõbusate mängu...