Artikoli

Python u metodi avvanzati, funzjonijiet dunder għal programmazzjoni aħjar

Python huwa lingwaġġ ta 'programmar meraviljuż, u kif jidher minn GitHub, hija wkoll it-tieni l-aktar lingwa popolari fl-2022.

L-aktar vantaġġi interessanti ta 'Python huma l-komunità kbira ta' programmaturi.

Jidher li Python għandu pakkett għal kwalunkwe każ ta 'użu.

Fid-dinja vasta tal-ipprogrammar ta 'Python, hemm sett ta' karatteristiċi li ħafna drabi ma jkunux innutati minn dawk li jibdew, iżda għandhom importanza sinifikanti fl-ekosistema tal-lingwa.

Metodi magic huma sett ta 'metodi ta' qabeldefinite f'Python li jipprovdu karatteristiċi sintattiċi speċjali. Huma faċilment rikonoxxuti mid-daxxijiet doppji tagħhom fil-bidu u fit-tmiem, bħal __init__, __call__, __len__ … eċċ.

Il-Metodi Maġiċi

Metodi maġiċi jippermettu li oġġetti personalizzati jġibu ruħhom simili għal tipi Python integrati.

F'dan l-artikolu, aħna se niffukaw fuq il-funzjonijiet dunder qawwija. Se nesploraw l-iskop tagħhom u niddiskutu l-użu tagħhom.

Kemm jekk inti novizzi ta 'Python jew programmatur b'esperjenza, dan l-artikolu għandu l-għan li jagħtik fehim komprensiv tal-funzjonijiet Dunder, u jagħmel l-esperjenza tiegħek ta' kodifikazzjoni Python aktar effiċjenti u pjaċevoli.

Ftakar, il-maġija ta 'Python tinsab mhux biss fis-sempliċità u l-versatilità tagħha, iżda wkoll fil-karatteristiċi qawwija tagħha bħall-funzjonijiet Dunder.

__init__

Forsi l-aktar funzjoni dunder bażika ta 'kollha. Dan huwa l-metodu maġiku li Python awtomatikament isejjaħ kull meta noħolqu (jew kif jissuġġerixxi l-isem, inizjalizza) oġġett ġdid.__init__

klassi Pizza:
def __init__(innifsi, daqs, uċuħ):
self.size = daqs
self.toppings = toppings

# Issa ejja noħolqu pizza
my_pizza = Pizza('kbar', ['pepperoni', 'faqqiegħ'])

print(my_pizza.size) # Dan se jistampa: kbir
print(my_pizza.toppings) # Dan se jistampa: ['pepperoni', 'faqqiegħ']

F'dan l-eżempju, tinħoloq klassi msejħa Pizza. Aħna waqqafna l-funzjoni __init__ tagħna biex tinkludi l-parametri li għandhom jiġu speċifikati fil-ħin tal-inizjalizzazzjoni, u ssettjahom bħala proprjetajiet għall-oġġett tad-dwana tagħna.

Hawnhekk, huwa użat biex jirrappreżenta l-istanza tal-klassi. Allura meta niktbu self.size = size, inkunu qed ngħidu, "Ħej, dan l-oġġett tal-pizza għandu daqs ta' attribut size, u nixtieq li jkun kwalunkwe daqs li pprovdejt meta ħloqt l-oġġett”.

__str__ u __repr__

__Str__

Dan huwa l-metodu maġiku ta 'Python li jippermettilna definish deskrizzjoni għall-oġġett tad-dwana tagħna.

Meta tipprintja oġġett jew jaqilbu għal spag bl-użu str(), Python iċċekkja jekk għandekx defiStajt ħriġt b'metodu __str__ għall-klassi ta' dak l-oġġett.

Jekk iva, uża dak il-metodu biex tikkonverti l-oġġett għal spag.

Nistgħu nestendu l-eżempju tal-Pizza tagħna biex jinkludi funzjoni __str__ kif ġej:

klassi Pizza: def __init__(self, size, toppings): self.size = size self.toppings = toppings def __str__(self): return f"A {self.size} pizza bi {', '.join(self.toppings) )}" my_pizza = Pizza('grande', ['pepperoni', 'mushrooms']) print(my_pizza) # This will print: Pizza kbira bil-pepperoni, faqqiegħ
__repr__

Il-funzjoni __str__ hija aktar mod informali kif tiddeskrivi l-proprjetajiet ta 'oġġett. Min-naħa l-oħra, __repr__ jintuża biex jipprovdi deskrizzjoni aktar formali, dettaljata u mhux ambigwa tal-oġġett tad-dwana.

Jekk iċempel repr() fuq oġġett jew sempliċement ittajpja l-isem tal-oġġett fil-console, Python se tfittex metodu __repr__.

Se __str__ mhuwiex definite, Python se juża __repr__ bħala backup meta tipprova tipprintja l-oġġett jew jaqilbu għal spag. Allura ħafna drabi hija idea tajba defifinitura mill-inqas __repr__, anke jekk ma tagħmilx hekk defitoħroġ __str__.

Hawn kif nistgħu defifinitura __repr__ għall-eżempju tal-pizza tagħna:

klassi Pizza:
def __init__(innifsi, daqs, uċuħ):
self.size = daqs
self.toppings = toppings

def __repr__(self):
lura f"Pizza('{self.size}', {self.toppings})"

my_pizza = Pizza('kbar', ['pepperoni', 'faqqiegħ'])
print(repr(my_pizza)) # Dan se jistampa: Pizza('kbar', ['pepperoni', 'faqqiegħ'])

__repr__ jagħtik string li tista 'taħdem bħala kmand Python biex toħloq mill-ġdid l-oġġett tal-pizza, filwaqt li __str__ jagħtik deskrizzjoni aktar umana. Nispera li jgħinek tomgħod dawn il-metodi dunder ftit aħjar!

__żid__

F'Python, ilkoll nafu li huwa possibbli li żżid in-numri billi tuża l-operatur +, Kif 3 + 5.

Imma x'jiġri jekk irridu nżidu każijiet ta 'xi oġġett tad-dwana?

Il-funzjoni dunder __add__ jippermettilna nagħmlu dan. Jagħtina l-abbiltà li definish l-imġieba ta 'l-operatur + fuq oġġetti personalizzati tagħna.

Fl-interess tal-konsistenza, ejja nassumu li rridu defispiċċa l-imġieba ta + fuq l-eżempju tal-pizza tagħna. Ejja ngħidu li kull meta nżidu żewġ pizez jew aktar flimkien, awtomatikament jgħaqqad it-toppings kollha tagħhom. Hawn kif jista' jidher:

klassi Pizza:
def __init__(innifsi, daqs, uċuħ):
self.size = daqs
self.toppings = toppings

def __add__(self, other):
jekk mhux istanza (oħrajn, Pizza):
raise TypeError ("Tista' biss iżżid Pizza oħra!")
new_toppings = self.toppings + other.toppings
ritorn Pizza(self.size, new_toppings)

# Ejja noħolqu żewġ pizez
pizza1 = Pizza('kbir', ['pepperoni', 'faqqiegħ'])
pizza2 = Pizza('kbir', ['żebbuġ', 'ananas'])

# U issa ejja "żidhom".
combined_pizza = pizza1 + pizza2

print(combined_pizza.toppings) # Dan se jistampa: ['pepperoni', 'faqqiegħ', 'żebbuġ', 'ananas']

Simili għal dunder __add__, nistgħu wkoll defifinitura funzjonijiet aritmetiċi oħra bħal __sub__ (bit-tnaqqis bl-użu tal-operatur -u __mul__ (għall-multiplikazzjoni bl-użu tal-operatur *).

__len__

Dan il-metodu dunder jippermettilna defifinitura dak il-funzjoni len() għandu jirritorna għall-oġġetti personalizzati tagħna.

Python juża len() biex tikseb it-tul jew id-daqs ta 'struttura tad-dejta bħal lista jew string.

Fil-kuntest tal-eżempju tagħna, nistgħu ngħidu li "it-tul" ta 'pizza huwa n-numru ta' toppings li għandha. Hawn kif nistgħu nimplimentawha:

klassi Pizza:
def __init__(innifsi, daqs, uċuħ):
self.size = daqs
self.toppings = toppings

def __len__(self):
ritorn len(self.toppings)

# Ejja noħolqu pizza
my_pizza = Pizza('kbar', ['pepperoni', 'faqqiegħ', 'żebbuġ'])

print(len(my_pizza)) # Dan se jistampa: 3

Fil-metodu __len__, aħna nirritornaw biss it-tul tal-lista toppings. Issa, len(my_pizza) se tgħidilna kemm toppings hemm fuqha my_pizza.

__ proċess __

Dan il-metodu dunder jippermetti li l-oġġetti jkunu iterabbli, jiġifieri jista 'jintuża f'for loop.

Biex nagħmlu dan, irridu wkoll defispiċċa l-funzjoni __next__, Dan huwa użat għal definish l-imġieba li għandha tirritorna l-valur li jmiss fl-iterazzjoni. Għandu wkoll jindika l-iterable fil-każ li ma jkunx hemm aktar elementi fis-sekwenza. Aħna tipikament niksbu dan billi jitfgħu eċċezzjoni StopIteration.

Għall-eżempju tal-pizza tagħna, ejja ngħidu li rridu nirrepetu l-uċuħ. Nistgħu nagħmlu l-klassi tal-Pizza tagħna iterabbli definendo metodu __iter__:

klassi Pizza:
def __init__(innifsi, daqs, uċuħ):
self.size = daqs
self.toppings = toppings

def __iter__(self):
awto.n = 0
ritorn awto

def __li jmiss__(innifsi):
jekk self.n < len(self.toppings):
riżultat = self.toppings[self.n]
awto.n += 1
riżultat lura
inkella:
jgħollu StopIteration

# Ejja noħolqu pizza
my_pizza = Pizza('kbar', ['pepperoni', 'faqqiegħ', 'żebbuġ'])

# U issa ejja nirrepetu fuqha
għall-topping fil my_pizza:
print (topping)

F'dan il-każ, is-sejħiet for loop __iter__, li initializes counter (self.n) u jirritorna l-oġġett tal-pizza innifsu (self).

Imbagħad, is-sejħiet for loop __next__ biex tikseb kull topping min-naħa tiegħu.

Meta __next__ lura l-ħwawar kollha, StopIteration titfa' eċċezzjoni u l-for loop issa jaf li m'hemmx aktar toppings u għalhekk se jwaqqaf il-proċess ta 'iterazzjoni.

Ercole Palmeri

Newsletter dwar l-innovazzjoni
Titlifx l-aktar aħbarijiet importanti dwar l-innovazzjoni. Irreġistra biex tirċevihom bl-email.
Tags: python

Artikoli riċenti

Il-Futur qiegħed Hawnhekk: Kif l-Industrija tat-Tbaħħir qed tirrivoluzzjona l-Ekonomija Globali

Is-settur navali huwa qawwa ekonomika globali vera, li navigat lejn suq ta’ 150 biljun...

1 Mejju 2024

Il-pubblikaturi u l-OpenAI jiffirmaw ftehimiet biex jirregolaw il-fluss tal-informazzjoni pproċessata mill-Intelliġenza Artifiċjali

It-Tnejn li għadda, il-Financial Times ħabbret ftehim mal-OpenAI. FT tagħti liċenzja għall-ġurnaliżmu ta’ klassi dinjija tagħha...

April 30 2024

Ħlasijiet Online: Hawn Kif Is-Servizzi ta' Streaming Jagħmel Inti Tħallas Għal Dejjem

Miljuni ta 'nies iħallsu għal servizzi ta' streaming, iħallsu miżati ta 'abbonament ta' kull xahar. Hija opinjoni komuni li inti...

April 29 2024

Veeam għandu l-aktar appoġġ komprensiv għar-ransomware, mill-protezzjoni għar-rispons u l-irkupru

Coveware minn Veeam se jkompli jipprovdi servizzi ta' rispons għal inċidenti ta' estorsjoni ċibernetika. Coveware se joffri forensiċi u kapaċitajiet ta' rimedju...

April 23 2024