Piton

Python leírók bemutatója

Python leírók bemutatója
Az osztályok között újrafelhasználható általános kód írásához hasznos technikát támogatnak Python-leírók, vagy közismertebb nevén leírók. Lehet, hogy közel állnak az öröklés fogalmához, de nem az. Ez egy közvetlen technika a kötelező jellegű attribútumokhoz való hozzáférés rögzítésére. A leírók a Python egyik alapvető funkciója, amely a varázslatok nagy részét irányítja, rejtve a nyelv alatt. Ha valaha úgy érezte, hogy a kevés funkcionális megvalósítású Python-leíró fejlett téma, akkor ez az oktatóanyag a legfrissebb platform arra, hogy megértse ezt az erőteljes funkciót.

Leíró módszerek

Világosan megfogalmazva, egy osztály, amely megvalósítja __kap_(), __készlet()_, vagy __töröl()_ egy objektum leíró protokolljának funkciója „leírónak” minősül. Az objektumot referenciaként használó különféle osztályok paramétereinek szabályozásához Python-leírók készülnek. Itt van három meghatározott módszer, amelyeket a leírókban használnak:

__kap__(): Amikor megpróbálja kinyerni az adatokat, a __kap__() attribútumot hívják, és bármit is ad, azt megadják a kódnak, amely egy változó értékét követeli. Nem adatleírónak minősül, és csak olvasható.

__készlet__(): A funkció __készlet__() a paraméterértékek beállítására szólít fel, és ez a funkció semmit sem ad vissza neked. Adatleíró néven ismert, amely nemcsak olvasható, hanem írható is.

__töröl__(): Amikor a paramétert eltávolítják egy objektumból, a __töröl__() függvényt hívjuk. Adatleíró néven ismert, amely nemcsak olvasható, hanem írható is.

Csak akkor kell érvényesítenie a leíró protokollt, ha Python leírókat használ a szkriptben. A protokoll legfontosabb funkciói a következők: kap() és készlet() a későbbi aláírással.

__get __ (self, obj, type = Nincs) -> objektum
__set __ (self, obj, value) -> Nincs

maga a leíró példánya.
obj annak az objektumnak a példánya, amelyhez a leíró kapcsolódik.
típus az objektum típusa.

Példa:

Itt két osztályt definiáltunk. Az osztályleíróban leíró módszereket definiáltunk. Ban,-ben kap() metódus, az én a "val" leíró példánya, "Geeks" értéket kap és eltárolja. Ezután egy karakterláncot készít, amelyhez a „for” kifejezés csatolva van a megadott attribútum között. osztályleíró (objektum):

def __get __ (self, obj, objtype):
adja vissza a következőt: „ for ”.formátum (önálló.val, én.val)

Ezután az értéket visszaadja a set () metódusra. Ez a függvény ezt követően ellenőrzi az értéket, függetlenül attól, hogy karakterláncról van-e szó. Abban az esetben, ha az érték egy karakterlánc, akkor egy „val” nevű attribútumba kerül. Ha az érték nem karakterlánc, kivételt dob.

def __set __ (self, obj, val):
ha isinstance (val, str):
maga.val = val
más:
raise TypeError („A név karakterlánc legyen”)

Ezt követően az értéket „GeeksforGeeks” karakterláncként nyomtatják ki.

GFG osztály (objektum):
val = Leíró ()
g = GFG ()
g.val = „Geeks”
nyomtatás (g.val)

Amikor megpróbálja futtatni ezt a kódot, a következő kimenetet kapja:

GeeksforGeeks

A leírók célja

Írjuk le a „home” nevű osztályt három jellemzővel, nevezetesen: loc, area és price. Használhatja a funkciót __benne__() az osztályattribútumok inicializálásához.

osztály otthon:

def __init __ (saját, hely, terület, ár):

Ezután használhatja a __str __ () függvényt, amely visszaadhatja annak a három attribútumnak az eredményét, amelyet az elem felépítésekor átadhat az osztálynak. A __str __ () függvény visszaadja a karakterláncot.

Amikor végrehajtja ezt a kódot, akkor a látszólag helyes kimenetet jeleníti meg.

Most próbáljuk meg megváltoztatni a lakás árát negatív értékre, az alábbiak szerint, és hajtsa végre a kódot.

A kimeneten látható negatív előjel kivételével egyáltalán nincs változás. Várj csak! Valami nincs itt, nem igaz? Hogy lehet, hogy egy lakás ára negatív. A Python megengedi, mert a Python egy sokoldalú fejlesztői környezet, amely kifejezetten nem teszi lehetővé a típusellenőrzést.

Inicializáljunk egy „ha” utasítást __benne__() függvény egy kivétel felvetéséhez, ha az érték vagy az ár nulla alatt van.

Mostantól észreveheti, hogy jól teljesít, és ha az ár nulla alatt van, a kód Értékhibát generál.

Mint megértjük, a __benne_() A function egy konstruktor, és csak egyszer hívja meg, amikor osztályobjektumot készít. Ezért később a testreszabott típusellenőrzés sikertelen lesz. A Python olyan leírásokat nyújt, amelyek a fenti problémák megoldására szakosodtak. Most kezdjük el ugyanabban a példában használni a leírásokat, hogy jól megértsük.

A leíró osztály ' __benne_() függvény helyi_változója __price 0-nál van. Elején egy kettős aláhúzás azt jelenti, hogy a paraméter privát. Arra szolgál, hogy a Descriptor osztály árparaméterét megkülönböztesse az otthoni osztálytól.

A __kap__() módszer megadja az árat. Az attribútumpéldány h1-et tartalmaz, amely egy leíró példány. Az attribútum tulajdonosa a „home” osztály nevére utal, és visszaadja az árat.

A funkció __készlet__() rendelkezik attribútummal példa amely h1-et és egy hozzárendelendő értéket tartalmaz. Az ellenőrzés megerősítésére szolgál az érték. Ha az érték egész szám, akkor ki lesz nyomtatva, ellenkező esetben a kód Type Error kivételt dob. Ha az érték nulla alatt van, akkor az Értékhiba kivétel kivetésre kerül a kódba.

A __töröl__() függvény akkor hajtódik végre, amikor a paraméter attribútumot eltávolítják egy objektumból.

Az otthoni osztály ugyanaz marad, bár a példány ár a (z) Descriptor () osztályba kerül. Ban,-ben __benne_() függvényt, adja hozzá az ár attribútumot a példány árához, és ez meghívja a __készlet_() funkció.

A kód futtatása közben Értékhibát fog kapni, mert az ár soha nem lehet nulla.

Most próbálja meg végrehajtani a kódot egy string értékkel.

Típushibát vet fel.

A meglévő példányértéket felülírják egy új példány létrehozásakor, mivel a leírók az osztályhoz kapcsolódnak, és nem a példányhoz. Vessen egy pillantást az alábbiakra:

Az első értéket felülírta a második.

Következtetés

Megértjük, miért váltak a Python leírói ilyen lenyűgöző témává, és hogy milyen használati szcenáriókhoz adhatja hozzá ezeket az oktatóanyagot.

Hogyan lehet rögzíteni és streamelni a játékmenetét Linuxon
Korábban a játékokat csak hobbinak tekintették, de az idő múlásával a játékipar hatalmas növekedést ért el a technológia és a játékosok száma szempont...
A legjobb játékok kézi követéssel
Az Oculus Quest nemrégiben bemutatta a vezérlés nélküli kézi követés nagyszerű ötletét. Az egyre növekvő számú játékkal és tevékenységgel, amelyek tám...
Az OSD-fedvény megjelenítése teljes képernyős Linux-alkalmazásokban és játékokban
Teljes képernyős játékok lejátszása vagy alkalmazások figyelemelterelés nélküli, teljes képernyős módban történő használata elvághatja a panelen vagy ...