Piton

Vodič za Python deskriptore

Vodič za Python deskriptore
Korisnu tehniku ​​za pisanje generičkog koda koji bi se mogao ponovno koristiti između klasa podržavaju Python deskriptori ili poznatiji kao deskriptori. Možda zvuče blisko pojmu nasljedstva, ali nisu. Ovo je izravna tehnika za hvatanje pristupa atributima koji imaju obvezujuću prirodu. Deskriptori su osnovna funkcija Pythona koja upravlja mnogim čarobnjaštvima, skrivenim pod naslovom jezika. Ako ste ikada osjetili da su Python deskriptori s malo funkcionalnih implementacija napredna tema, onda je ovaj tutorial krajnja platforma koja će vam pomoći da razumijete ovu moćnu značajku.

Metode deskriptora

Jasno rečeno, klasa koja provodi __dobiti_(), __set () _, ili __izbrisati()_ funkcija protokola deskriptora za objekt klasificirana je kao "deskriptor". Za upravljanje parametrima različitih klasa koje koriste objekt kao referencu, izrađuju se Python deskriptori. Evo tri navedene metode koje će se koristiti u opisima:

__dobiti__(): Kada pokušate izvući podatke, __dobiti__() atribut se poziva i sve što pruža je ono što bi se dobilo u kodu koji zahtijeva vrijednost jedne varijable. Kategoriziran je kao deskriptor bez podataka i čitljiv je samo.

__set __ (): Funkcija __set __ () poziva se za podešavanje vrijednosti parametara i ova vam funkcija ništa ne vraća. Poznat je kao deskriptor podataka koji je ne samo čitljiv već i zapisljiv.

__izbrisati__(): Kad god se parametar ukloni s objekta, __izbrisati__() funkcija se naziva. Poznat je kao deskriptor podataka koji je ne samo čitljiv već i zapisljiv.

Morate primijeniti protokol deskriptora samo ako u svojoj skripti koristite Python deskriptore. Najvažnije funkcije protokola su dobiti() i postavi () imajući naknadni potpis.

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

sebe je instanca deskriptora.
obj je instanca objekta na koji je povezan vaš deskriptor.
tip je vrsta objekta.

Primjer:

Ovdje smo definirali dvije klase. U klasi Descriptor definirali smo metode deskriptora. U dobiti(), self je instanca za deskriptor 'val', dobit će vrijednost 'Geeks' i pohraniti je. Tada će stvoriti niz s 'for' pričvršćen između navedenog atributa. Deskriptor klase (objekt):

def __get __ (self, obj, objtype):
vrati " za ".format (self.val, ja.val)

Zatim će vratiti vrijednost metodi set (). Ova funkcija zatim provjerava vrijednost, je li niz ili nije. U slučaju da je vrijednost niz, bit će spremljena u atribut nazvan 'val'. Ako vrijednost nije niz, izbacit će iznimku.

def __set __ (self, obj, val):
if isinstance (val, str):
sebe.val = val
drugo:
podići TypeError ("Ime treba biti niz")

Nakon toga, vrijednost će se ispisati u obliku niza 'GeeksforGeeks'.

klasa GFG (objekt):
val = deskriptor ()
g = GFG ()
g.val = "Geekovi"
ispis (g.val)

Kada pokušate pokrenuti ovaj kod, dobit ćete sljedeći izlaz:

GeeksforGeeks

Svrha deskriptora

Opišimo razred pod nazivom 'dom' s tri karakteristike, i to: lokacijom, površinom i cijenom. Možete koristiti funkciju __u tome__() za inicijalizaciju atributa klase.

razredni dom:

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

Zatim možete upotrijebiti funkciju __str __ () koja može vratiti rezultat tri atributa koja biste mogli proslijediti klasi prilikom izrade stavke. Funkcija __str __ () vratit će niz.

Kada izvršite ovaj kod, on će prikazati naizgled ispravan izlaz.

Pokušajmo sada promijeniti cijenu kuće na negativnu vrijednost, kao u nastavku, i izvršiti kôd.

Uopće nema promjene, osim negativnog predznaka, kao što je prikazano u izlazu. Čekaj! Nešto nije u redu ovdje, zar ne? Kako to da je cijena kuće negativna. Python to dopušta jer je Python svestrano razvojno okruženje koje izričito ne dopušta provjeru tipa.

Inicirajmo izraz 'if' u __u tome__() funkcija za stvaranje iznimke ako je vrijednost ili cijena manja od nule.

Od sada ćete primijetiti da dobro funkcionira, a ako je cijena manja od nule, kôd generira pogrešku vrijednosti.

Kao što bismo mogli razumjeti, __u tome_() funkcija je konstruktor i poziva se samo jednom kada napravite objekt klase. Stoga kasnije prilagođena provjera tipa neće uspjeti. Python nudi deskriptore koji su specijalizirani za pomoć u rješavanju svih gore navedenih problema. Počnimo sada koristiti deskriptore u istom primjeru kako bismo ga dobro razumjeli.

Klasa deskriptora ' __u tome_() funkcija ima lokalnu varijablu __cjena na 0. Na početku dvostruko podvlačenje podrazumijeva da je parametar privatan. Koristi se za razlikovanje parametra cijene klase Descriptor od domaće klase.

The __dobiti__() metoda će vratiti cijenu. Instanca atributa sadrži h1, koja je instanca deskriptora. Vlasnik atributa odnosi se na naziv klase 'dom' i vraća cijenu.

Funkcija __set __ () ima atribut primjer koji sadrži h1 i vrijednost koju treba dodijeliti. Provjera se koristi za potvrdu vrijednosti. Ako je vrijednost cijeli broj, ispisat će se, u suprotnom, kod s izuzećem Type Error. Ako je vrijednost ispod nule, iznimka pogreške vrijednosti bit će bačena u kôd.

The __izbrisati__() funkcija se izvršava kada se atribut parametra ukloni iz objekta.

Domaća klasa ostaje ista, iako instanca cijena klase Descriptor () dodaje se. U __u tome_() funkcija, dodajte atribut price u cijenu instance i ona će pozvati __set_ () funkcija.

Tijekom izvođenja ovog koda dobit će pogrešku u vrijednosti jer cijena nikada ne može biti nula.

Sada pokušajte izvršiti kod s nizom vrijednosti.

Izbacit će izuzetak pogreške tipa.

Postojeća vrijednost instance zamjenjuje se prilikom formiranja nove instance jer su se deskriptori odnosili na klasu, a ne na instancu. Pogledajte dolje:

Prva je vrijednost nadjačana s drugom.

Zaključak

Možemo shvatiti zašto su deskriptori iz Pythona postali tako fascinantna tema i u kakve ih scenarije upotrebe možete dodati prolazeći kroz ovaj vodič.

Instalirajte najnoviju strategiju igre OpenRA na Ubuntu Linux
OpenRA je Libre / Free Real Time strateški pokretač igre koji stvara rane Westwoodove igre poput klasične Command & Conquer: Red Alert. Distribuirani ...
Instalirajte najnoviji Dolphin Emulator za Gamecube i Wii na Linux
Dolphin Emulator omogućuje vam igranje odabranih Gamecube i Wii igara na Linux osobnim računalima (PC). Dolphin Emulator je slobodno dostupan i emula...
Kako koristiti GameConqueror Cheat Engine u Linuxu
Članak pokriva vodič o korištenju GameConqueror varalice u Linuxu. Mnogi korisnici koji igraju igre na sustavu Windows često koriste aplikaciju "Cheat...