Greinar

Python og háþróaðar aðferðir, dunder aðgerðir fyrir betri forritun

Python er frábært forritunarmál, og eins og sést af GitHub, er einnig annað vinsælasta tungumálið árið 2022.

Áhugaverðustu kostir Python eru stórt samfélag forritara.

Það virðist sem Python sé með pakka fyrir hvaða notkunartilvik sem er.

Í hinum víðfeðma heimi Python forritunar er fjöldi eiginleika sem oft fara framhjá byrjendum, en hafa þó verulega þýðingu í vistkerfi tungumálsins.

Töfraaðferðir eru sett af foraðferðumdefinites í Python sem veita sérstaka setningafræðilega eiginleika. Þeir þekkjast auðveldlega á tvöföldum strikum sínum í upphafi og lok, eins og __init__, __call__, __len__ … o.s.frv.

Töfrandi aðferðirnar

Töfraaðferðir leyfa sérsniðnum hlutum að hegða sér svipað og innbyggðar Python-gerðir.

Í þessari grein munum við einbeita okkur að öflugum dunderaðgerðum. Við munum kanna tilgang þeirra og ræða notkun þeirra.

Hvort sem þú ert Python nýliði eða reyndur forritari, miðar þessi grein að því að veita þér alhliða skilning á Dunder aðgerðum, sem gerir Python kóðunarupplifun þína skilvirkari og skemmtilegri.

Mundu að galdurinn við Python liggur ekki aðeins í einfaldleika hans og fjölhæfni, heldur einnig í öflugum eiginleikum eins og Dunder aðgerðum.

__init__

Kannski undirstöðu dunder aðgerðin af öllu. Þetta er töfraaðferðin sem Python kallar sjálfkrafa í hvert sinn sem við búum til (eða eins og nafnið gefur til kynna, frumstillum) nýjan hlut.__init__

flokks pizza:
def __init__(sjálf, stærð, álegg):
self.size = stærð
sjálf.álegg = álegg

# Nú skulum við búa til pizzu
my_pizza = Pizza('stór', ['pepperoni', 'sveppir'])

print(my_pizza.size) # Þetta mun prenta: stórt
print(my_pizza.toppings) # Þetta mun prenta: ['pepperoni', 'sveppir']

Í þessu dæmi er flokkur sem heitir Pizza búinn til. Við setjum upp __init__ fallið okkar til að innihalda færibreyturnar sem á að tilgreina við upphafstíma og stillum þær sem eiginleika fyrir sérsniðna hlutinn okkar.

Hér er það notað til að tákna tilvik flokksins. Svo þegar við skrifum self.size = stærð, þá erum við að segja: "Hey, þessi pizzahlutur hefur eigindastærð size, og ég vil að það sé hvaða stærð sem ég gaf upp þegar ég bjó til hlutinn“.

__str__ og __repr__

__Str__

Þetta er töfraaðferð Python sem gerir okkur kleift definish lýsingu fyrir sérsniðna hlutinn okkar.

Þegar þú prentar hlut eða umbreytir honum í streng með því að nota str(), Python athugaðu hvort þú hafir defiÉg hef fundið upp aðferð __str__ fyrir flokk þess hlutar.

Ef svo er, notaðu þá aðferð til að breyta hlutnum í streng.

Við getum útvíkkað Pizza dæmið okkar til að innihalda fall __str__ sem hér segir:

class Pizza: def __init__(sjálf, stærð, álegg): self.size = stærð self.toppings = álegg def __str__(self): skila f"A {self.size} pizzu með {', '.join(self.toppings )}" my_pizza = Pizza('stór', ['pepperoni', 'sveppir']) print(my_pizza) # Þetta mun prenta: Stór pizza með pepperoni, sveppum
__repr__

__str__ fallið er frekar óformleg leið til að lýsa eiginleikum hlutar. Á hinn bóginn er __repr__ notað til að veita formlegri, nákvæmari og ótvíræðari lýsingu á sérsniðna hlutnum.

Ef þú hringir repr() á hlut eða þú skrifar bara nafn hlutar inn í stjórnborðið, Python mun leita að aðferð __repr__.

Se __str__ það er ekki defikvöld, Python mun nota __repr__ sem öryggisafrit þegar reynt er að prenta hlutinn eða breyta honum í streng. Svo það er oft góð hugmynd defiklára allavega __repr__, jafnvel þótt þú gerir það ekki defikemur út __str__.

Svona gætum við defiklára __repr__ fyrir pizzudæmið okkar:

flokks pizza:
def __init__(sjálf, stærð, álegg):
self.size = stærð
sjálf.álegg = álegg

def __repr__(sjálf):
skilaðu f"Pizza('{self.size}', {self.topnings})"

my_pizza = Pizza('stór', ['pepperoni', 'sveppir'])
print(repr(my_pizza)) # Þetta mun prenta: Pizza('stór', ['pepperoni', 'sveppir'])

__repr__ gefur þér streng sem þú getur keyrt sem Python skipun til að endurskapa pizzuhlutinn, en __str__ gefur þér mannlegri lýsingu. Ég vona að það hjálpi þér að tyggja þessar dunder-aðferðir aðeins betur!

__Bæta við__

Í Python vitum við öll að það er hægt að bæta við tölum með því að nota stjórnandann +, eins og 3 + 5.

En hvað ef við viljum bæta við tilvikum af einhverjum sérsniðnum hlut?

Dunder aðgerðin __add__ það gerir okkur kleift að gera einmitt það. Það gefur okkur getu til að definish hegðun rekstraraðila + á persónulegum hlutum okkar.

Í þágu samræmis skulum við gera ráð fyrir að við viljum það defiklára hegðun + á pizzadæminu okkar. Segjum að þegar við bætum tveimur eða fleiri pizzum saman þá sameinar það sjálfkrafa allt álegg þeirra. Svona gæti það litið út:

flokks pizza:
def __init__(sjálf, stærð, álegg):
self.size = stærð
sjálf.álegg = álegg

def __add__(sjálf, annað):
ef ekki er tilvik (annað, pizza):
hækka TypeError("Þú getur bara bætt við annarri pizzu!")
new_toppings = sjálf.álegg + annað.álegg
skila pizzu(sjálfstærð, nýtt_álegg)

# Búum til tvær pizzur
pizza1 = Pizza('stór', ['pepperoni', 'sveppir'])
pizza2 = Pizza('stór', ['ólífur', 'ananas'])

# Og nú skulum við „bæta við“ þeim
sameinuð_pizza = pizza1 + pizza2

print(combined_pizza.toppings) # Þetta mun prenta: ['pepperoni', 'sveppir', 'ólífur', 'ananas']

Svipað og dunder __add__, við getum líka defiklára önnur reikniföll eins og __sub__ (með frádrætti með því að nota rekstraraðilann -) Og __mul__ (til margföldunar með því að nota rekstraraðila *).

__len__

Þessi dunder aðferð gerir okkur kleift defiklára hvað virka len() verður að skila fyrir sérsniðna hluti okkar.

Python notar len() til að fá lengd eða stærð gagnaskipulags eins og lista eða strengs.

Í samhengi við dæmið okkar gætum við sagt að „lengd“ pizzu sé fjöldi áleggs sem hún hefur. Svona gætum við útfært það:

flokks pizza:
def __init__(sjálf, stærð, álegg):
self.size = stærð
sjálf.álegg = álegg

def __len__(sjálf):
skila len(self.toppings)

# Búum til pizzu
my_pizza = Pizza('stór', ['pepperoni', 'sveppir', 'ólífur'])

print(len(my_pizza)) # Þetta mun prenta: 3

Í __len__ aðferðinni skilum við aðeins lengd listans toppings. Nú, len(my_pizza) það mun segja okkur hversu mikið álegg er á það my_pizza.

__aðferð__

Þessi dunder aðferð gerir hlutum kleift að vera endurteknir, þ.e.a.s. hægt er að nota hana í for lykkju.

Til að gera þetta verðum við líka defiklára aðgerðina __next__, Þetta er notað fyrir definish hegðun sem ætti að skila næsta gildi í endurtekningu. Það ætti einnig að gefa til kynna endurtekningu á atburðinum að það séu ekki fleiri þættir í röðinni. Við náum þessu venjulega með því að henda undanþágu StopIteration.

Fyrir pizzudæmið okkar, segjum að við viljum endurtaka áleggið. Við gætum gert pizzutímann okkar ganghæfan definendo aðferð __iter__:

flokks pizza:
def __init__(sjálf, stærð, álegg):
self.size = stærð
sjálf.álegg = álegg

def __iter__(sjálf):
sjálf.n = 0
skila sjálfum sér

def __næsta__(sjálf):
if self.n < len(self.toppings):
niðurstaða = sjálf.álegg[sjálf.n]
sjálf.n += 1
skila niðurstöðu
Annar:
hækka StopIteration

# Búum til pizzu
my_pizza = Pizza('stór', ['pepperoni', 'sveppir', 'ólífur'])

# Og nú skulum við endurtaka það
fyrir álegg í my_pizza:
prenta (álegg)

Í þessu tilviki, for loop símtöl __iter__, sem frumstillir teljara (self.n) og skilar pizzuhlutnum sjálfum (self).

Síðan, for loop símtöl __next__ að fá hvert álegg á fætur öðru.

Hvenær __next__ skilaði öllu kryddinu, StopIteration það gefur undantekningu og for lykkjan veit núna að það eru ekki fleiri álegg og mun því hætta við endurtekningarferlið.

Ercole Palmeri

Nýsköpunarfréttabréf
Ekki missa af mikilvægustu fréttunum um nýsköpun. Skráðu þig til að fá þau með tölvupósti.
Tags: python

Nýlegar greinar

Útgefendur og OpenAI skrifa undir samninga um að stjórna flæði upplýsinga sem unnið er með gervigreind

Síðasta mánudag tilkynnti Financial Times um samning við OpenAI. FT leyfir heimsklassa blaðamennsku…

30 Apríl 2024

Greiðslur á netinu: Hér er hvernig streymisþjónusta gerir þér kleift að borga að eilífu

Milljónir manna borga fyrir streymisþjónustu og greiða mánaðarlega áskriftargjöld. Það er almenn skoðun að þú…

29 Apríl 2024

Veeam býður upp á umfangsmesta stuðninginn fyrir lausnarhugbúnað, allt frá vernd til viðbragða og bata

Coveware frá Veeam mun halda áfram að veita viðbragðsþjónustu fyrir tölvukúgun. Coveware mun bjóða upp á réttar- og úrbótamöguleika ...

23 Apríl 2024

Græn og stafræn bylting: Hvernig forspárviðhald er að umbreyta olíu- og gasiðnaðinum

Forspárviðhald er að gjörbylta olíu- og gasgeiranum, með nýstárlegri og fyrirbyggjandi nálgun við verksmiðjustjórnun.…

22 Apríl 2024