Krajta

Výukový program pro deskriptory Pythonu

Výukový program pro deskriptory Pythonu
Užitečná technika pro psaní obecného kódu, který lze znovu použít mezi třídami, je podporována deskriptory Pythonu nebo běžněji známými jako deskriptory. Mohou znít blízce pojmu dědictví, ale nejsou. Toto je přímá technika k zachycení přístupu k atributům se závaznou povahou. Deskriptory jsou základní funkcí Pythonu, která ovládá mnoho čarodějnictví, skrytých pod rouškou jazyka. Pokud jste někdy cítili, že deskriptory Pythonu s malými funkčními implementacemi jsou pokročilým předmětem, pak je tento tutoriál dokonalou platformou, která vám pomůže porozumět této výkonné funkci.

Metody deskriptorů

Abychom to jasně řekli, třída, která se implementuje __dostat_(), __soubor()_, nebo __vymazat()_ funkce deskriptorového protokolu pro objekt je klasifikována jako „deskriptor“. K řízení parametrů různých tříd, které používají objekt jako odkaz, jsou vytvořeny deskriptory Pythonu. Tady jsou tři zadané metody, které budou použity v deskriptorech:

__dostat__(): Když se pokusíte extrahovat data, __dostat__() atribut se nazývá a cokoli poskytuje, je to, co by bylo poskytnuto kódu požadující hodnotu jedné proměnné. Je kategorizován jako deskriptor bez údajů a je pouze čitelný.

__soubor__(): Funkce __soubor__() je volána k úpravě hodnot parametrů a tato funkce vám nic nevrátí. Je známý jako deskriptor dat, který je nejen čitelný, ale také zapisovatelný.

__vymazat__(): Kdykoli je parametr z objektu odstraněn, __vymazat__() funkce se volá. Je známý jako deskriptor dat, který je nejen čitelný, ale také zapisovatelný.

Protokol deskriptoru musíte vynutit pouze v případě, že ve svém skriptu používáte deskriptory Pythonu. Nejvýznamnější funkce protokolu jsou dostat() a soubor() s následným podpisem.

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

je instance deskriptoru.
obj je instance objektu, ke kterému je váš deskriptor připojen.
typ je typ objektu.

Příklad:

Zde jsme definovali dvě třídy. Ve třídě Deskriptor jsme definovali metody deskriptorů. V dostat() metoda, já je instance pro deskriptor 'val', dostane hodnotu 'Geeks' a uloží ji. Pak udělá řetězec s 'pro' připojeným mezi poskytnutým atributem. deskriptor třídy (objekt):

def __get __ (self, obj, objtype):
vrátit „ pro “.formát (vlastní.val, já.val)

Poté vrátí hodnotu metodě set (). Tato funkce poté zkontroluje hodnotu, ať už jde o řetězec nebo ne. V případě, že hodnota je řetězec, bude uložen do atributu s názvem 'val'. Pokud hodnota není řetězec, vyvolá výjimku.

def __set __ (self, obj, val):
if isinstance (val, str):
já.val = val
jiný:
zvýšit TypeError („Název by měl být řetězec“)

Poté bude hodnota vytištěna jako řetězec 'GeeksforGeeks'.

třída GFG (objekt):
val = Deskriptor ()
g = GFG ()
G.val = “Geekové”
tisk (např.val)

Při pokusu o spuštění tohoto kódu získáte následující výstup:

GeeksforGeeks

Účel deskriptorů

Popíšeme třídu s názvem „domov“ se třemi charakteristikami, konkrétně: loc, area a price. Tuto funkci můžete použít __init __ () inicializovat atributy třídy.

třída doma:

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

Potom můžete použít funkci __str __ (), která by mohla vrátit výsledek tří atributů, které byste mohli předat třídě při vytváření položky. Funkce __str __ () vrátí řetězec.

Když tento kód spustíte, zobrazí se zdánlivě správný výstup.

Zkusme nyní změnit cenu domu na zápornou hodnotu, jak je uvedeno níže, a spusťte kód.

Neexistuje vůbec žádná změna, s výjimkou záporného znaménka, jak je znázorněno na výstupu. Vydrž! Něco tu je, že?? Jak to, že cena domu je negativní. Python to umožňuje, protože Python je univerzální vývojové prostředí, které konkrétně neumožňuje kontrolu typu.

Pojďme inicializovat příkaz 'if' v __init __ () funkce pro vyvolání výjimky, pokud je hodnota nebo cena menší než nula.

Od této chvíle si můžete všimnout, že funguje dobře, a pokud je cena nižší než nula, generuje kód chybu hodnoty.

Jak jsme mohli pochopit, __init_ () funkce je konstruktor a je vyvolána pouze jednou, když vytváříte objekt třídy. Proto by později selhala přizpůsobená kontrola typu. Python poskytuje deskriptory, které se specializují na řešení všech výše uvedených problémů. Začněme nyní používat deskriptory ve stejném příkladu, abychom tomu dobře porozuměli.

Třída deskriptoru ' __init_ () funkce má lokální proměnnou __price na 0. Na začátku dvojité podtržítko znamená, že parametr je soukromý. Používá se k odlišení parametru ceny deskriptorové třídy od domácí třídy.

The __dostat__() metoda vrátí cenu. Instance atributu obsahuje h1, což je instance deskriptoru. Vlastník atributu odkazuje na název třídy „domov“ a vrátí cenu.

Funkce __soubor__() má atribut instance který obsahuje h1 a hodnotu, která má být přiřazena. Kontrola slouží k potvrzení hodnoty. Pokud je hodnota celé číslo, vytiskne se, jinak kód s vyvoláním výjimky Type Error. Pokud je hodnota pod nulou, bude do kódu vyvolána výjimka Chyba hodnoty.

The __vymazat__() funkce je provedena, když je atribut parametru odstraněn z objektu.

Domácí třída zůstává stejná, ačkoli instance cena třídy Descriptor () je přidán. V __init_ () funkce, přidejte atribut ceny k ceně instance a zavolá __soubor_() funkce.

Při spuštění tohoto kódu vám dá chybu hodnoty, protože cena nikdy nemůže být nulová.

Nyní zkuste spustit kód s hodnotou řetězce.

Vyvolá výjimku Chyba typu.

Stávající hodnota instance je přepsána při vytváření nové instance, protože deskriptory se vztahují ke třídě a nikoli k instanci. Podívejte se níže:

První hodnota byla přepsána druhou.

Závěr

Můžeme pochopit, proč se deskriptory z Pythonu staly tak fascinujícím tématem a do jakých scénářů použití je můžete přidat procházením tohoto tutoriálu.

Jak změnit levé a pravé tlačítko myši na počítači se systémem Windows 10
Je úplnou normou, že všechna zařízení počítačových myší jsou ergonomicky navržena pro praváky. K dispozici jsou však myší zařízení, která jsou speciál...
Emulace kliknutí myší vznášením pomocí myši Clickless Mouse ve Windows 10
Používání myši nebo klávesnice ve špatném držení těla nadměrného používání může mít za následek mnoho zdravotních problémů, včetně napětí, syndromu ka...
Přidejte gesta myši do Windows 10 pomocí těchto bezplatných nástrojů
V posledních letech se počítače a operační systémy značně vyvinuly. Bývaly doby, kdy uživatelé museli procházet správci souborů pomocí příkazů. Stejně...