Python

Python Descriptors Vejledning

Python Descriptors Vejledning
En nyttig teknik til at skrive generisk kode, der kan genbruges mellem klasserne, understøttes af Python-deskriptorer eller mere almindeligt kendt som deskriptorer. De lyder måske tæt på forestillingen om arv, men det er de ikke. Dette er en direkte teknik til at fange adgang til attributter med bindende karakter. Beskrivelser er en grundlæggende funktion af Python, der styrer en masse trolddom, skjult under sprogets dækning. Hvis du nogensinde har følt, at Python-deskriptorer med få funktionelle implementeringer er et avanceret emne, er denne tutorial den ultimative platform, der får dig til at forstå denne kraftfulde funktion.

Beskrivelsesmetoder

At sige det klart, en klasse, der gennemføres __få_(), __sæt()_, eller __delete () _ funktion af en deskriptorprotokol for et objekt er klassificeret som en "Descriptor". For at styre parametrene for forskellige klasser, der bruger objektet som reference, laves Python-deskriptorer. Her er tre specificerede metoder, som vil blive brugt i deskriptorer:

__få__(): Når du prøver at udtrække data, vises __få__() attribut kaldes, og uanset hvad det giver, er hvad der ville blive leveret til koden, der krævede værdien af ​​en variabel. Det er kategoriseret som en ikke-data-deskriptor og kan kun læses.

__sæt__(): Funktionen __sæt__() kaldes til at justere parameterværdierne, og intet returneres til dig med denne funktion. Det er kendt som en databeskrivelse, der ikke kun er læsbar, men også skrivbar.

__slet __ (): Når parameteren fjernes fra et objekt, vises __slet __ () funktion kaldes. Det er kendt som en databeskrivelse, der ikke kun er læsbar, men også skrivbar.

Du skal kun håndhæve deskriptorprotokollen, hvis du bruger Python-deskriptorer i dit script. De vigtigste funktioner i protokollen er få() og sæt() med den efterfølgende underskrift.

__get __ (selv, obj, type = Ingen) -> objekt
__set __ (selv, obj, værdi) -> Ingen

selv er forekomsten af ​​deskriptoren.
obj er en forekomst af det objekt, som din deskriptor er knyttet til.
type er typen af ​​et objekt.

Eksempel:

Her har vi defineret to klasser. I klassen Descriptor har vi definerede deskriptormetoder. I få() metode, selvet er forekomsten af ​​deskriptoren 'val', den får en værdi 'Geeks' og gemmer den. Derefter oprettes en streng med 'for' knyttet mellem den angivne attribut. klasse deskriptor (objekt):

def __get __ (selv, obj, objtype):
returner " for ".format (selv.val, selv.val)

Derefter returnerer værdien til metoden set (). Denne funktion kontrollerer derefter for værdien, uanset om den er en streng eller ej. Hvis værdien er en streng, gemmes den i en attribut med navnet 'val'. Hvis værdien ikke er en streng, kaster den en undtagelse.

def __set __ (selv, obj, val):
hvis isinstance (val, str):
selv.val = val
andet:
hæve TypeError ("Navn skal være streng")

Herefter bliver værdien udskrevet som en streng 'GeeksforGeeks'.

klasse GFG (objekt):
val = deskriptor ()
g = GFG ()
g.val = “Geeks”
udskrive (g.val)

Når du prøver at køre denne kode, får du følgende output:

GeeksforGeeks

Formålet med deskriptorer

Lad os beskrive en klasse med navnet 'hjem' med tre karakteristika, nemlig: lokalitet, område og pris. Du kan bruge funktionen __i det__() at initialisere klasseattributterne.

klassehjem:

def __init __ (selv, lokal, område, pris):

Derefter kan du bruge funktionen __str __ (), som kan returnere resultatet af de tre attributter, som du muligvis videregiver til klassen, når du bygger varen. Funktionen __str __ () returnerer strengen.

Når du udfører denne kode, viser den tilsyneladende korrekte output.

Lad os nu prøve at ændre prisen på hjemmet til en negativ værdi, som nedenfor, og udføre koden.

Der er slet ingen ændring undtagen det negative tegn som vist i output. Hæng i! Noget er væk her, ikke sandt? Hvorfor er prisen på et hjem negativ. Python tillader det, fordi Python er et alsidigt udviklingsmiljø, der specifikt ikke tillader typekontrol.

Lad os initialisere en 'hvis' erklæring i __i det__() funktion til at hæve en undtagelse, hvis værdien eller prisen er mindre end nul.

Fra nu af kan du bemærke, at det fungerer godt, og hvis prisen er mindre end nul, genererer koden en værdifejl.

Som vi måske forstår, __i det_() funktionen er en konstruktør og påkaldes kun en gang, når du laver et klasseobjekt. Derfor senere mislykkedes tilpasset typekontrol. Python leverer deskriptorer, der er specialiserede i at hjælpe med at løse alle ovenstående bekymringer. Lad os nu begynde at bruge deskriptorer i det samme eksempel for at forstå det godt.

Descriptor-klassen ' __i det_() funktionen har en lokal variabel __pris ved 0. I starten af ​​det betyder en dobbelt understregning, at parameteren er privat. Det bruges til at differentiere Descriptor-klassens prisparameter fra hjemmeklassen.

Det __få__() metode returnerer prisen. Attributforekomsten indeholder h1, som er en deskriptorforekomst. Attributtejer refererer til navnet på klassen 'hjem' og returnerer prisen.

Funktionen __sæt__() har en attribut eksempel der indeholder h1 og en værdi, der skal tildeles. Kontrollen bruges til at bekræfte værdien. Hvis værdien er et heltal, vil den blive udskrevet, ellers koden med en undtagelse for typefejl. Hvis værdien er under nul, kastes værdifejlundtagelsen i koden.

Det __slet __ () funktionen udføres, når parameterattributten fjernes fra et objekt.

Hjemmeklassen forbliver den samme, selvom den forekommer pris af klassen Descriptor () tilføjes. I __i det_() funktion, tilføj prisattributten til instansprisen, og den kalder __sæt_() fungere.

Mens du kører denne kode, giver den dig en værdifejl, fordi prisen aldrig kan være nul.

Prøv nu at udføre koden med en strengværdi.

Det kaster en undtagelse fra typefejl.

Den eksisterende forekomstværdi tilsidesættes ved dannelsen af ​​en ny forekomst, da beskrivelserne er relateret til klassen og ikke forekomsten. Se nedenfor:

Den første værdi er blevet tilsidesat med den anden.

Konklusion

Vi kan forstå, hvorfor deskriptorer fra Python er blevet et så fascinerende emne, og hvilken slags brugsscenarier du kan tilføje dem til ved at gennemgå denne vejledning.

Mus AppyMouse pegefelt på skærmen og musemarkør til Windows-tablets
AppyMouse pegefelt på skærmen og musemarkør til Windows-tablets
Tabletbrugere savner ofte musemarkøren, især når de er vante til at bruge bærbare computere. Touchscreen-smartphones og tablets har mange fordele, og ...
Mus Midterste museknap fungerer ikke i Windows 10
Midterste museknap fungerer ikke i Windows 10
Det midterste museknap hjælper dig med at rulle gennem lange websider og skærme med en masse data. Hvis det stopper, vil du ende med at bruge tastatur...
Mus Sådan ændres venstre og højre museknap på Windows 10-pc
Sådan ændres venstre og højre museknap på Windows 10-pc
Det er en ganske normal, at alle computermusenheder er ergonomisk designet til højrehåndede brugere. Men der er musenheder til rådighed, der er specie...