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.