Python

Výukový program pre deskriptory Pythonu

Výukový program pre deskriptory Pythonu
Užitočnú techniku ​​na písanie generického kódu, ktorú je možné medzi triedami opakovane použiť, podporujú deskriptory Pythonu alebo viac známe ako deskriptory. Môžu znieť blízko pojmu dedičstvo, ale nie sú. Toto je priama technika na zachytenie prístupu k atribútom záväznej povahy. Deskriptory sú základnou funkciou Pythonu, ktorá riadi veľa čarodejníc, skrytých pod rúškom jazyka. Ak ste niekedy mali pocit, že deskriptory Pythonu s malými funkčnými implementáciami sú pokročilým predmetom, potom je tento tutoriál dokonalou platformou, vďaka ktorej pochopíte túto výkonnú funkciu.

Metódy deskriptorov

Aby sme to jasne uviedli, trieda, ktorá sa implementuje __get_ (), __set () _, alebo __delete () _ funkcia deskriptorového protokolu pre objekt je klasifikovaná ako „Deskriptor“. Na riadenie parametrov rôznych tried, ktoré používajú objekt ako referenciu, sa vytvárajú deskriptory Pythonu. Tu sú tri špecifikované metódy, ktoré sa použijú v deskriptoroch:

__get __ (): Pri pokuse o extrakciu údajov sa zobrazí __get __ () atribút sa volá a všetko, čo poskytuje, by sa poskytlo kódu požadujúcemu hodnotu jednej premennej. Je kategorizovaný ako deskriptor iných ako údajov a je iba čitateľný.

__set __ (): Funkcia __set __ () je volaný na úpravu hodnôt parametrov a táto funkcia vám nič nevráti. Je známy ako deskriptor údajov, ktorý je nielen čitateľný, ale aj zapisovateľný.

__delete __ (): Kedykoľvek je parameter odstránený z objektu, znak __delete __ () funkcia sa volá. Je známy ako deskriptor údajov, ktorý je nielen čitateľný, ale aj zapisovateľný.

Protokol deskriptora musíte vynútiť, iba ak vo svojom skripte používate deskriptory Pythonu. Najvýznamnejšie funkcie protokolu sú dostať () a sada () s následným podpisom.

__get __ (self, obj, type = None) -> objekt
__set __ (self, obj, value) -> Žiadne

ja je inštancia deskriptora.
obj je inštancia objektu, ku ktorému je pripojený váš deskriptor.
typu je typ objektu.

Príklad:

Tu sme definovali dve triedy. V triede Deskriptor sme definovali metódy deskriptorov. V dostať (), samo je inštanciou pre deskriptor „val“, získa hodnotu „Geeks“ a uloží ju. Potom vytvorí reťazec s príponou „pre“ medzi poskytnutým atribútom. deskriptor triedy (objekt):

def __get __ (self, obj, objtype):
vrátiť „ pre “.formát (vlastný.val, ja.val)

Potom vráti hodnotu metóde set (). Táto funkcia potom skontroluje hodnotu, či už je to reťazec alebo nie. V prípade, že ide o reťazec, uloží sa do atribútu s názvom „val“. Ak hodnota nie je reťazec, spôsobí výnimku.

def __set __ (self, obj, val):
if isinstance (val, str):
ja.val = val
inak:
zvýšiť TypeError („Názov by mal byť reťazec“)

Potom sa hodnota vytlačí ako reťazec „GeeksforGeeks“.

trieda GFG (objekt):
val = deskriptor ()
g = GFG ()
g.val = “Geeks”
tlač (napr.val)

Pri pokuse o spustenie tohto kódu získate nasledujúci výstup:

GeeksforGeeks

Účel deskriptorov

Popíšme triedu s názvom „domov“ s tromi charakteristikami: loc, area a price. Môžete použiť túto funkciu __init __ () na inicializáciu atribútov triedy.

trieda domov:

def __init __ (self, loc, area, price):

Potom môžete použiť funkciu __str __ (), ktorá môže vrátiť výsledok troch atribútov, ktoré môžete odovzdať triede pri vytváraní položky. Funkcia __str __ () vráti reťazec.

Po vykonaní tohto kódu sa zobrazí zdanlivo správny výstup.

Teraz sa pokúsime zmeniť cenu domu na zápornú hodnotu, ako je uvedené nižšie, a vykoname kód.

Neexistuje vôbec žiadna zmena, okrem záporného znamienka, ako je znázornené na výstupe. Počkaj! Niečo tu je, však?? Ako to, že cena domu je negatívna. Python to umožňuje, pretože Python je všestranné vývojové prostredie, ktoré konkrétne neumožňuje kontrolu typu.

Inicializujme vyhlásenie „keby“ v __init __ () funkcia na zvýšenie výnimky, ak je hodnota alebo cena nižšia ako nula.

Odteraz si môžete všimnúť, že funguje dobre, a ak je cena nižšia ako nula, kód vygeneruje chybu hodnoty.

Ako by sme mohli pochopiť, __init_ () Funkcia je konštruktor a pri vytváraní objektu triedy sa vyvolá iba raz. Preto by neskôr vlastná kontrola typu zlyhala. Python poskytuje deskriptory, ktoré sa špecializujú na pomoc pri riešení všetkých vyššie uvedených problémov. Teraz začnime používať deskriptory v rovnakom príklade, aby sme tomu dobre porozumeli.

Trieda deskriptora “ __init_ () funkcia má lokálnu premennú __price na 0. Na jeho začiatku dvojité podčiarknutie znamená, že parameter je súkromný. Používa sa na odlíšenie cenového parametra triedy Deskriptor od domácej triedy.

The __get __ () metóda vráti cenu. Inštancia atribútu obsahuje h1, čo je inštancia deskriptora. Vlastník atribútu odkazuje na názov triedy „domov“ a vráti cenu.

Funkcia __set __ () má prívlastok inštancia ktorý obsahuje h1 a hodnotu, ktorá sa má priradiť. Kontrola sa používa na potvrdenie hodnoty. Ak je hodnota celé číslo, vytlačí sa, inak kód s vyvolaním výnimky Type Error. Ak je hodnota pod nulou, do kódu sa vloží výnimka Chyba hodnoty.

The __delete __ () funkcia sa vykoná, keď sa z objektu odstráni atribút parametra.

Domáca trieda zostáva rovnaká, hoci inštancia cena triedy Deskriptor (). V __init_ () Funkcia, pridá atribút ceny k cene inštancie a zavolá __set_ () funkcia.

Pri spustení tohto kódu vám dá chybu hodnoty, pretože cena nikdy nemôže byť nulová.

Teraz skúste spustiť kód s hodnotou reťazca.

Bude to hodiť výnimku Type Type.

Existujúca hodnota inštancie je pri vytvorení novej inštancie prepísaná, pretože deskriptory súvisia s triedou, a nie s inštanciou. Zoznámte sa nižšie:

Prvá hodnota bola prepísaná druhou.

Záver

Môžeme pochopiť, prečo sa deskriptory z Pythonu stali tak fascinujúcou témou a k akým scenárom použitia ich môžete pridať, absolvovaním tohto tutoriálu.

Hry HD remasterované hry pre Linux, ktoré nikdy predtým nemali vydanie Linuxu
HD remasterované hry pre Linux, ktoré nikdy predtým nemali vydanie Linuxu
Mnoho vývojárov a vydavateľov hier prichádza s remastrom starých hier v rozlíšení HD, aby predĺžili životnosť franšízy. Prosím fanúšikov, ktorí požadu...
Hry Ako používať AutoKey na automatizáciu hier pre Linux
Ako používať AutoKey na automatizáciu hier pre Linux
AutoKey je obslužný program na automatizáciu stolných počítačov pre systémy Linux a X11, programovaný v programoch Python 3, GTK a Qt. Pomocou jeho fu...
Hry Ako zobraziť počítadlo FPS v hrách Linux
Ako zobraziť počítadlo FPS v hrách Linux
Hranie na systéme Linux získalo veľký tlak, keď spoločnosť Valve v roku 2012 oznámila podporu systému Linux pre klienta Steam a ich hry. Od tej doby s...