Artikuj

Python dhe metoda të avancuara, funksione dunder për programim më të mirë

Python është një gjuhë programimi fantastike, dhe siç dëshmohet nga GitHub, është gjithashtu gjuha e dytë më e njohur në vitin 2022.

Përparësitë më interesante të Python janë komuniteti i madh i programuesve.

Duket se Python ka një paketë për çdo rast përdorimi.

Në botën e madhe të programimit Python, ekziston një sërë veçorish që shpesh kalojnë pa u vënë re nga fillestarët, por megjithatë kanë një rëndësi të madhe në ekosistemin e gjuhës.

Metodat magjike janë një grup metodash paraprakedefinites në Python që ofrojnë veçori të veçanta sintaksore. Ata njihen lehtësisht nga vizat e tyre të dyfishta në fillim dhe në fund, si p.sh __init__, __call__, __len__ … etj.

Metodat Magjike

Metodat magjike lejojnë që objektet e personalizuara të sillen ngjashëm me llojet e integruara të Python.

Në këtë artikull, ne do të përqendrohemi në funksionet e fuqishme dunder. Ne do të shqyrtojmë qëllimin e tyre dhe do të diskutojmë përdorimin e tyre.

Pavarësisht nëse jeni një fillestar në Python ose një programues me përvojë, ky artikull synon t'ju ofrojë një kuptim gjithëpërfshirës të funksioneve të Dunder, duke e bërë përvojën tuaj të kodimit në Python më efikase dhe më të këndshme.

Mos harroni, magjia e Python nuk qëndron vetëm në thjeshtësinë dhe shkathtësinë e tij, por edhe në veçoritë e tij të fuqishme si funksionet Dunder.

__init__

Ndoshta funksioni më themelor i të gjithëve. Kjo është metoda magjike që Python thërret automatikisht sa herë që krijojmë (ose siç sugjeron emri, inicializojmë) një objekt të ri.__init__

Pica e klasës:
def __init__(vetë, madhësia, mbushjet):
vetë.madhësia = madhësia
vetë.mbije = mbushje

# Tani le të krijojmë një picë
my_pizza = Pica('e madhe', ['pepperoni', 'kërpudha'])

print(my_pizza.size) # Kjo do të printojë: i madh
print(my_pizza.toppings) # Kjo do të printojë: ['pepperoni', 'kërpudha']

Në këtë shembull, krijohet një klasë e quajtur Pizza. Ne konfiguruam funksionin tonë __init__ për të përfshirë parametrat që do të specifikohen në kohën e inicializimit dhe i vendosim ato si veti për objektin tonë të personalizuar.

Këtu, përdoret për të përfaqësuar shembullin e klasës. Pra, kur shkruajmë self.size = madhësia, ne po themi, "Hej, ky objekt picash ka një madhësi atribute size, dhe dua që të jetë çfarëdo madhësie që kam dhënë kur kam krijuar objektin”.

__str__ dhe __repr__

__Rr__

Kjo është metoda magjike e Python që na lejon definish një përshkrim për artikullin tonë të personalizuar.

Kur printoni një objekt ose e konvertoni atë në një varg duke përdorur str(), Python kontrolloni nëse keni defiUnë kam dalë me një metodë __str__ për klasën e atij objekti.

Nëse po, përdorni atë metodë për të kthyer objektin në një varg.

Ne mund ta zgjerojmë shembullin tonë të Pizza për të përfshirë një funksion __str__ si më poshtë:

class Pizza: def __init__(vetë, madhësia, toppings): vetë.size = size self.toppings = toppings def __str__(vetë): kthe f"A {self.size} pizza with {', '.join(self.toppings )}" my_pizza = Pica('large', ['pepperoni', 'kërpudha']) print(my_pizza) # Kjo do të printojë: Një picë e madhe me peperoni, kërpudha
__repr__

Funksioni __str__ është më shumë një mënyrë joformale për të përshkruar vetitë e një objekti. Nga ana tjetër, __repr__ përdoret për të ofruar një përshkrim më formal, të detajuar dhe më të qartë të objektit të personalizuar.

Nëse telefononi repr() në një objekt ose thjesht shkruani emrin e objektit në tastierë, Python do të kërkojë një metodë __repr__.

Se __str__ asnje definite, Python do të përdorë __repr__ si një kopje rezervë kur përpiqeni të printoni objektin ose ta shndërroni atë në një varg. Kështu që shpesh është një ide e mirë defipërfundoni të paktën __repr__, edhe nëse nuk e bëni defivjen nga __str__.

Ja si mundemi defipërfundoni __repr__ për shembullin tonë të picës:

Artikuj të ngjashëm
Pica e klasës:
def __init__(vetë, madhësia, mbushjet):
vetë.madhësia = madhësia
vetë.mbije = mbushje

def __repr__(vetë):
ktheni f"Pica('{self.size}', {self.toppings})"

my_pizza = Pica('e madhe', ['pepperoni', 'kërpudha'])
print(repr(my_pizza)) # Kjo do të printojë: Pica ('i madh', ['pepperoni', 'kërpudha'])

__repr__ ju jep një varg që mund ta ekzekutoni si një komandë Python për të rikrijuar objektin e picës, ndërsa __str__ ju jep një përshkrim më njerëzor. Shpresoj që t'ju ndihmojë t'i përtypni pak më mirë këto metoda!

__shtoj__

Në Python, ne të gjithë e dimë se është e mundur të shtoni numra duke përdorur operatorin +, Si 3 + 5.

Por, çka nëse duam të shtojmë shembuj të ndonjë objekti të personalizuar?

Funksioni dunder __add__ na lejon të bëjmë pikërisht këtë. Na jep aftësinë për të defikujdes sjelljen e operatorit + në artikujt tanë të personalizuar.

Në interes të konsistencës, le të supozojmë se duam defipërfundoni sjelljen e + në shembullin tonë të picës. Le të themi se sa herë që shtojmë dy ose më shumë pica së bashku, automatikisht do të kombinohen të gjitha mbushjet e tyre. Ja si mund të duket:

Pica e klasës:
def __init__(vetë, madhësia, mbushjet):
vetë.madhësia = madhësia
vetë.mbije = mbushje

def __shto__(vetja, tjetri):
nëse jo një shembull (tjetër, Pica):
raise TypeError ("Mund të shtoni vetëm një pica tjetër!")
ri_toppings = vetë.mbushje + të tjera.toppings
Pica kthyese (përmasat e veta, mbushjet e reja)

# Le të krijojmë dy pica
pizza1 = Pica ('e madhe', ['pepperoni', 'kërpudha'])
pizza2 = Pica ('i madh', ['ullinj', 'ananas'])

# Dhe tani le t'i "shtojmë" ato
pica_kombinuar = pica1 + pica2

print(combined_pizza.toppings) # Kjo do të printojë: ['pepperoni', 'kërpudha', 'ullinj', 'ananas']

Ngjashëm me dunder __add__, ne gjithashtu mundemi defitë përfundojë funksione të tjera aritmetike si p.sh __sub__ (me zbritje duke përdorur operatorin -) Dhe __mul__ (për shumëzim duke përdorur operatorin *).

__len__

Kjo metodë dunder na lejon defipërfundojnë atë funksion len() duhet të kthehen për artikujt tanë të personalizuar.

Python përdor len() për të marrë gjatësinë ose madhësinë e një strukture të dhënash si një listë ose varg.

Në kontekstin e shembullit tonë, mund të themi se "gjatësia" e një pice është numri i mbushjeve që ka. Ja se si mund ta zbatojmë atë:

Pica e klasës:
def __init__(vetë, madhësia, mbushjet):
vetë.madhësia = madhësia
vetë.mbije = mbushje

def __len__(vetë):
lente kthyese (vetë. mbushje)

# Le të krijojmë një picë
my_pizza = Pica('e madhe', ['pepperoni', 'kërpudha', 'ullinj'])

print(len(pica_my)) # Kjo do të printojë: 3

Në metodën __len__, ne kthejmë vetëm gjatësinë e listës toppings. Tani, len(my_pizza) do të na tregojë sa mbushje ka mbi të my_pizza.

__ procesi __

Kjo metodë dunder lejon që objektet të jenë të përsëritur, d.m.th. mund të përdoret në një cikli for.

Për ta bërë këtë, ne gjithashtu duhet defipërfundoni funksionin __next__, Kjo përdoret për definish sjelljen që duhet të kthejë vlerën tjetër në përsëritje. Ai gjithashtu duhet të sinjalizojë përsëritësin në rast se nuk ka më elementë në sekuencë. Zakonisht e arrijmë këtë duke bërë një përjashtim StopIteration.

Për shembullin tonë të picës, le të themi se duam të përsërisim mbushjet. Ne mund ta bëjmë klasën tonë të Pizzës të përsëritur definendo një metodë __iter__:

Pica e klasës:
def __init__(vetë, madhësia, mbushjet):
vetë.madhësia = madhësia
vetë.mbije = mbushje

defin __iter__(vetë):
vetë.n = 0
kthej veten

defin __next__(vetë):
nqs vet.n < len(vete.mbushje):
rezultat = vetë.mbushje[vetë.n]
vetja.n += 1
rezultati i kthimit
tjeter:
ngriti StopIteration

# Le të krijojmë një picë
my_pizza = Pica('e madhe', ['pepperoni', 'kërpudha', 'ullinj'])

# Dhe tani le të përsërisim mbi të
për mbushje në my_pizza:
shtypje (përfundim)

Në këtë rast, cikli for thërret __iter__, i cili inicializon një numërues (self.n) dhe e kthen vetë objektin e picës (self).

Pastaj, cikli for bën thirrje __next__ për të marrë çdo majë me radhë.

Quando __next__ ktheu të gjitha erëzat, StopIteration hedh një përjashtim dhe cikli for tani e di që nuk ka më mbushje dhe kështu do të ndërpresë procesin e përsëritjes.

Ercole Palmeri

Buletini i inovacionit
Mos humbisni lajmet më të rëndësishme mbi inovacionin. Regjistrohuni për t'i marrë ato me email.
Tags: piton

Artikujt e fundit

Përgjigja e bën të disponueshme MLFRAME Reply, një kornizë e bazuar në inteligjencën artificiale gjeneruese të aplikuar për zhvillimin dhe ndarjen e njohurive

Reply njofton nisjen e MLFRAME Reply, një kornizë e re gjeneruese e inteligjencës artificiale për baza heterogjene njohurish. Projektuar…

23 shtator 2023

Fillesat më inovative të shpërblyera: 10 finalistët e ÇMIMIT MASTER STARTUP ITALIAN (IMSA) 2023

Çmimi IMSA për startup-et e rinj të lindur nga kërkimet brenda universiteteve dhe…

22 shtator 2023

Udhëheqësit e mendimit në Forumin e Çmimit të Qëndrueshmërisë Zayed theksojnë mënyrat për të çuar përpara përparimin për njerëzit dhe planetin

Çmimi Zayed për Qëndrueshmërinë është çmimi global i Emirateve të Bashkuara Arabe për qëndrueshmërinë dhe angazhimin humanitar.…

22 shtator 2023

Reply merr 4 Çmime Oracle EMEA Cluster Partner në kategoritë Inovacioni, Ndikimi i Biznesit dhe Suksesi i Klientit

Reply, një konsulencë globale dhe integrues i sistemit dhe Ofruesi i Shërbimit i Menaxhuar i Oracle Cloud, njofton se ka marrë…

19 shtator 2023

MasterZ, Masteri më i madh Blockchain dhe WEB 3.0 në Evropë, lançon një platformë të re kushtuar mësimit, praktikës dhe punës

MasterZ Blockchain, rrit vlerën për Masterin më të madh të Ekselencës WEB 3.0 në Evropë. Skuadra tërësisht italiane…

19 shtator 2023

Çmimi Zayed Sustainability Prize shpall 33 finalistë që avancojnë iniciativat globale të qëndrueshmërisë

33 finalistë të përzgjedhur nga 5.213 aplikime në 163 vende Finalistët avokojnë për veprim klimatik me ndikim dhe mbështesin aksesin në energji të pastër,…

18 shtator 2023

Tendencat dhe risitë në zhvillim në kërkimin biologjik: nga stoli në shtrat

Biologët janë shfaqur si një klasë farmaceutike novatore, duke revolucionarizuar fushën e mjekësisë përmes terapive të synuara. PËR…

17 shtator 2023

3D Systems thjeshton prodhimin dhe nxit inovacionin e vazhdueshëm duke siguruar prodhimin e platformave shtesë të ndërtimit

Sigurimi i printerëve për prodhimin e metaleve dhe polimereve në fabrikat në Riom, Francë dhe Rock Hill, Karolina…

17 shtator 2023

Biognosys paraqet risitë teknologjike dhe përparimet shkencore për ta bërë proteomën të përdorshme për kërkimin e shkencave të jetës në Kongresin Botëror HUPO 2023

Analiza e të dhënave pa bibliotekë, e fuqizuar nga mësimi i makinerive me Spectronaut ® 18 ofron sasi dhe xhiro të proteinave lider në industri…

16 shtator 2023

Mattermost lançon partneritete të reja për të nxitur risi dhe adoptim më të madh në sektorin publik

Mattermost përmban një ekosistem të zgjeruar të aleatëve me një theks në rastet e reja të përdorimit të DoD për zgjidhje…

16 shtator 2023