Aprašomieji metodai
Norint tai aiškiai pasakyti, klasė, kuri įgyvendina __get_ (), __set () _, arba __Ištrinti()_ objekto deskriptoriaus protokolo funkcija klasifikuojama kaip „deskriptorius“. Norėdami valdyti įvairių klasių, kurios naudoja objektą kaip nuorodą, parametrus, sudaromi „Python“ aprašai. Čia yra trys nurodyti metodai, kurie bus naudojami aprašuose:
__get __ (): Kai bandote išgauti duomenis, __get __ () atributas yra vadinamas, ir kad ir ką jis pateiktų, tai būtų suteikta kodui, reikalaujančiam vieno kintamojo vertės. Jis priskiriamas duomenų, kurie nėra duomenys, kategorijai ir yra tik skaitomas.
__set __ (): Funkcija __set __ () kviečiamas pakoreguoti parametro reikšmes, ir ši funkcija jums nieko negrąžina. Jis žinomas kaip duomenų aprašas, kuris yra ne tik skaitomas, bet ir rašomas.
__Ištrinti__(): Kai parametras pašalinamas iš objekto, __Ištrinti__() vadinama funkcija. Jis žinomas kaip duomenų aprašas, kuris yra ne tik skaitomas, bet ir rašomas.
Vykdyti aprašo protokolą turėsite tik tada, jei scenarijuje naudojate „Python“ deskriptorius. Svarbiausios protokolo funkcijos yra gauti () ir rinkinys () turėdamas vėlesnį parašą.
__get __ (self, obj, type = None) -> objektas
__set __ (self, obj, value) -> Nėra
savarankiškai yra deskriptoriaus pavyzdys.
obj yra objekto, prie kurio prijungtas jūsų deskriptorius, egzempliorius.
tipo yra objekto tipas.
Pavyzdys:
Čia mes apibrėžėme dvi klases. Klasės apraše apibrėžėme aprašų metodus. Viduje konors gauti () metodas, aš yra deskriptoriaus „val“ egzempliorius, jis gaus reikšmę „Geeks“ ir jį išsaugos. Tada tarp pateikto atributo bus sukurta eilutė su „už“. klasės aprašas (objektas):
def __get __ (savęs, obj, objtype):
grąžinti „ už “.formatas (savarankiškas.val, savęs.val)
Tada ji grąžins reikšmę į set () metodą. Tada ši funkcija patikrina vertę, ar tai eilutė, ar ne. Jei vertė yra eilutė, ji bus išsaugota atribute pavadinimu „val“. Jei reikšmė nėra eilutė, tai bus išimtis.
def __set __ (self, obj, val):
jei yra (val, str):
savarankiškai.val = val
Kitas:
raise TypeError („Pavadinimas turi būti eilutė“)
Po to vertė bus atspausdinta kaip eilutė „GeeksforGeeks“.
GFG klasė (objektas):
val = deskriptorius ()
g = GFG ()
g.val = „Geeks“
spausdinti (g.val)
Kai bandysite paleisti šį kodą, gausite šį išvestį:
„GeeksforGeeks“
Apibūdintojų paskirtis
Apibūdinkime klasę pavadinimu „namai“ su trimis charakteristikomis: vietovė, plotas ir kaina. Galite naudoti šią funkciją __init __ () inicijuoti klasės atributus.
klasės namai:
def __init __ (savęs, vietos, ploto, kainos):
Tada galite naudoti funkciją __str __ (), kuri gali grąžinti trijų atributų, kuriuos galite perduoti klasei, kurdami elementą, rezultatą. Funkcija __str __ () grąžins eilutę.
Kai vykdysite šį kodą, jis parodys iš pažiūros teisingą išvestį.
Dabar pabandykime pakeisti namo kainą į neigiamą vertę, kaip nurodyta toliau, ir įvykdykite kodą.
Visiškai nėra jokių pokyčių, išskyrus neigiamą ženklą, kaip parodyta išvestyje. Laikykis! Kažkas čia ne, ar ne? Kaip būsto kaina yra neigiama. „Python“ tai leidžia, nes „Python“ yra universali kūrimo aplinka, kuri neleidžia tikrinti tipo.
Inicializuokime teiginį „jei“ __init __ () funkcija išimčiai iškelti, jei vertė ar kaina yra mažesnė už nulį.
Dabar galite pastebėti, kad jis veikia gerai, o jei kaina yra mažesnė nei nulis, kodas sukuria vertės klaidą.
Kaip mes galime suprasti, __init_ () funkcija yra konstruktorius ir yra iškviečiama tik vieną kartą, kai kuriate klasės objektą. Todėl vėliau nepavyks pritaikyti tipo patikrinimo. „Python“ pateikia aprašus, kurie specializuojasi padėti išspręsti visas pirmiau nurodytas problemas. Dabar pradėkime naudoti aprašus tame pačiame pavyzdyje, kad gerai jį suprastume.
„Deskriptoriaus klasė“ __init_ () funkcijos vietinis kintamasis __price yra 0. Jo pradžioje dvigubas pabraukimas reiškia, kad parametras yra privatus. Jis naudojamas atskirti „Descriptor“ klasės kainos parametrą nuo namų klasės.
The __get __ () metodas grąžins kainą. Atributo egzemplioriuje yra h1, kuris yra deskriptorius. Atributo savininkas nurodo klasės pavadinimą „namai“ ir pateikia kainą.
Funkcija __set __ () turi atributą instancija kuriame yra h1 ir vertė, kurią reikia priskirti. Reikšmei patvirtinti naudojamas patikrinimas. Jei reikšmė yra sveikasis skaičius, ji bus atspausdinta, priešingu atveju kodas su „Type Error“ išimtis. Jei vertė yra mažesnė už nulį, reikšmės klaidos išimtis bus įtraukta į kodą.
The __Ištrinti__() funkcija vykdoma pašalinus parametro atributą iš objekto.
Namų klasė lieka ta pati, nors pavyzdys kaina pridedama „Descriptor“ () klasės klasė. Viduje konors __init_ () funkciją, pridėkite kainos atributą prie egzemplioriaus kainos ir jis iškvies __set_ () funkcija.
Vykdydamas šį kodą jis suteiks vertės klaidą, nes kaina niekada negali būti lygi nuliui.
Dabar pabandykite įvykdyti kodą su eilutės verte.
Tai sukels tipo klaidos išimtį.
Formuojant naują egzempliorių, esama egzemplioriaus reikšmė nepaisoma, nes deskriptoriai yra susiję su klase, o ne su egzemplioriumi. Pažvelkite žemiau:
Pirmoji reikšmė buvo pakeista su antrąja.
Išvada
Mes galime suvokti, kodėl „Python“ aprašai tapo tokia patrauklia tema ir prie kokių naudojimo scenarijų galite juos pridėti, eidami per šią pamoką.