amanqaku

I-Python kunye neendlela eziphambili, imisebenzi ye-dunder yeprogram engcono

I-Python lulwimi lwenkqubo olumangalisayo, kwaye njengoko kungqinwa ngu GitHub, ikwalulwimi lwesibini oludumileyo ngo-2022.

Eyona nto inomdla kakhulu kwiPython luluntu olukhulu lwabaprogram.

Kubonakala ngathi iPython inephakheji yayo nayiphi na imeko yokusetyenziswa.

Kwihlabathi elikhulu lenkqubo yePython, kukho iseti yeempawu ezihlala zingaqatshelwa ngabasaqalayo, kodwa zibaluleke kakhulu kwi-ecosystem yolwimi.

Iindlela zomlingo yiseti yeendlela zangaphambilidefinited kwiPython ebonelela ngokusebenza okukhethekileyo kokwenziwa kwentetho. Zibonwa lula ngoodwi bawo kabini ekuqaleni nasekupheleni, njenge __init__, __call__, __len__ ... njl.

Iindlela Zomlingo

Iindlela zomlingo zivumela izinto zesiko ukuba ziziphathe ngokufana neentlobo zePython ezakhelwe ngaphakathi.

Kweli nqaku, siza kugxila kwimisebenzi enamandla ye-dunder. Siza kuphonononga injongo yabo kwaye sixoxe ngokusetyenziswa kwabo.

Nokuba ungumfundi wePython okanye ungumdwebi wenkqubo onamava, eli nqaku lijolise ekukuboneleleni ngokuqonda okubanzi kwemisebenzi yeDunder, okwenza amava akho ekhowudi yePython asebenze ngakumbi kwaye ayonwabe.

Khumbula, umlingo wePython abukho nje ngokulula kunye nokuguquguquka kwayo, kodwa nakwiempawu zayo ezinamandla njengemisebenzi yeDunder.

__init__

Mhlawumbi owona msebenzi usisiseko we-dunder kuwo wonke. Le yindlela yomlingo iPython eyibiza ngokuzenzekelayo ngalo lonke ixesha sidala (okanye njengoko igama licebisa, qalisa) into entsha.__init__

iklasi yePizza:
def __init__(uqobo, ubungakanani, iitoppings):
self.size = ubukhulu
self.toppings = iitoppings

# Ngoku makhe senze ipizza
my_pizza = iPizza('enkulu', ['pepperoni', 'amakhowa'])

print(my_pizza.size) # Oku kuya kuprinta: enkulu
print(my_pizza.toppings) # Oku kuya kuprinta: ['pepperoni', 'amakhowa']

Kulo mzekelo, iklasi ebizwa ngokuba yiPizza yenziwe. Siseta __init__ umsebenzi wethu ukubandakanya iiparameters ukucacisa ngexesha lokuqalisa, kwaye sizise njengempahla yento yethu yesiko.

Apha, isetyenziselwa ukumela umzekelo weklasi. Ke xa sibhala self.size = ubukhulu, sithi, "Heyi, le pizza inophawu size, kwaye ndifuna ukuba yiyiphi na isayizi endiyinike yona xa ndidala into ".

__str__ kunye __repr__

__Str__

Le yindlela yomlingo yePython esivumela ukuba senze defiNite inkcazo yento yethu yesiko.

Xa uprinta into okanye uyiguqulela kumtya usebenzisa str(), Python khangela ukuba unayo defindenze indlela __str__ kudidi lwaloo nto.

Ukuba kunjalo, sebenzisa loo ndlela ukuguqula into ibe ngumtya.

Sinokwandisa umzekelo wethu wePizza ukubandakanya umsebenzi __str__ ngolu hlobo:

iklasi Pizza: def __init__(self, size, toppings): self.size = size self.toppings = toppings def __str__(self): return f"A {self.size} pizza nge {', '.join(self.toppings) )}" my_pizza = IPizza('inkulu', ['pepperoni', 'amakhowa']) print(my_pizza) # Oku kuya kuprintwa: Ipizza enkulu enepepperoni, amakhowa
__repr__

Umsebenzi we-__str__ ungaphezulu kwendlela engekho sikweni yokuchaza iimpawu zento. Kwelinye icala, __repr__ isetyenziselwa ukubonelela ngokusesikweni ngakumbi, inkcazo eneenkcukacha kunye necacileyo yento yesiko.

Ukuba uyafowuna repr() kwinto okanye uchwetheza nje igama lento kwiconsole, iPython izakukhangela indlela __repr__.

Se __str__ yiyo ayiyo definite, iPython iya kusebenzisa __repr__ njengogcino xa uzama ukuprinta into okanye ukuyiguqulela kumtya. Ngoko idla ngokuba ngumbono olungileyo defiukugqiba ubuncinane __repr__, nokuba awufuni defikuhle __str__.

Nantsi indlela esinokuyenza ngayo defigqiba __repr__ kumzekelo wethu wepizza:

iklasi yePizza:
def __init__(uqobo, ubungakanani, iitoppings):
self.size = ubukhulu
self.toppings = iitoppings

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

my_pizza = iPizza('enkulu', ['pepperoni', 'amakhowa'])
print(repr(my_pizza)) # Oku kuya kuprinta: I-Pizza('enkulu', ['pepperoni', 'amakhowa'])

__repr__ ikunika umtya onokuthi uwubaleke njengomyalelo wePython ukwenza kwakhona into yepizza, kanti __str__ ikunika inkcazo yomntu ngakumbi. Ndiyathemba ukuba iyakunceda ukuba uhlafune ezi ndlela ze-dunder ngcono kancinci!

__yongeza__

KwiPython, sonke siyazi ukuba kunokwenzeka ukongeza amanani usebenzisa umqhubi +, njenge 3 + 5.

Kodwa kuthekani ukuba sifuna ukongeza imizekelo yento eqhelekileyo?

Umsebenzi we-dunder __add__ isivumela ukuba senze loo nto kanye. Isinika ithuba lokuba deficokisa ukuziphatha komsebenzisi + kwizinto zethu ezenzelwe wena.

Ngomdla wokungaguquguquki, masicinge ukuba sifuna definite ukuziphatha kwe + kumzekelo wethu wepizza. Masithi nanini na xa songeza iipizza ezimbini okanye ngaphezulu kunye, iyakudibanisa ngokuzenzekelayo zonke iitoppings zazo. Nantsi into enokujongeka ngayo:

iklasi yePizza:
def __init__(uqobo, ubungakanani, iitoppings):
self.size = ubukhulu
self.toppings = iitoppings

def __yongeza__(ukwakho, okunye):
ukuba akunjalo (enye, iPizza):
phakamisa i-TypeError ("Unokongeza enye iPizza!")
new_toppings = self.toppings + other.toppings
buyisela iPizza(ubukhulu, iziqholo ezintsha)

# Masenze iipizza ezimbini
pizza1 = Ipitsa('enkulu', ['pepperoni', 'amakhowa'])
ipizza2 = IPizza('enkulu', ['iminquma', 'pineapple'])

# Kwaye ngoku "mabongeze" kubo
idityanisiwe_pizza = ipizza1 + ipizza2

print(combined_pizza.toppings) # Oku kuya kuprinta: ['pepperoni', 'amakhowa', 'iminquma', 'ipayina']

Ngokufanayo ne-dunder __add__, nathi sinako definite eminye imisebenzi arithmetic ezifana __sub__ (ngokuthabatha usebenzisa umsebenzisi -) e __mul__ (ukuphindaphinda usebenzisa umsebenzisi *).

__len__

Le ndlela ye-dunder iyasivumela ukuba definish yintoni umsebenzi len() kufuneka sibuyele kwizinto zethu ezenziwe ngokwezifiso.

Python isebenzisa len() ukufumana ubude okanye ubungakanani besakhiwo sedata esinjengoluhlu okanye umtya.

Kumxholo womzekelo wethu, sinokuthi "ubude" bepizza linani lezinto zokuthambisa enazo. Nantsi indlela esinokuyiphumeza ngayo:

iklasi yePizza:
def __init__(uqobo, ubungakanani, iitoppings):
self.size = ubukhulu
self.toppings = iitoppings

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

# Masenze ipizza
my_pizza = iPizza('enkulu', ['pepperoni', 'amakhowa', 'iminquma'])

print(len(my_pizza)) # Oku kuya kuprinta: 3

Kwindlela ye-__len__, sibuyisela kuphela ubude boluhlu toppings. Ngoku, len(my_pizza) iya kusixelela ukuba zingaphi iitoppings eziphezu kwayo my_pizza.

_ inkqubo __

Le ndlela ye-dunder ivumela izinto ukuba zikwazi ukuphinda-phinda, o.k.t. ingasetyenziswa kwi-loop.

Ukwenza oku, kufuneka nathi defigqibezela umsebenzi __next__, Oku kusetyenziselwa defiPhelisa ukuziphatha ekufuneka kubuyise ixabiso elilandelayo kuphindaphindo. Ngaphaya koko, kufuneka kwakhona ibonise i-iterable kwisiganeko sokuba akusekho zinto kulandelelwano. Ngokuqhelekileyo sifezekisa oku ngokuphakamisa okukhethekileyo StopIteration.

Kumzekelo wethu wepizza, masithi sifuna ukuphinda-phinda iitoppings. Sinokwenza iklasi yethu yePizza ibe lula defiukunika indlela __iter__:

iklasi yePizza:
def __init__(uqobo, ubungakanani, iitoppings):
self.size = ubukhulu
self.toppings = iitoppings

def __iter__(self):
wena = 0
zibuyise

def __ilandelayo__(self):
ukuba self.n < len(self.toppings):
isiphumo = self.toppings[self.n]
wena.n += 1
isiphumo sokubuya
enye:
phakamisa StopIteration

# Masenze ipizza
my_pizza = iPizza('enkulu', ['pepperoni', 'amakhowa', 'iminquma'])

# Kwaye ngoku makhe siyiphindaphinde
yokongeza kwi-pizza yam:
print(ukubeka phezulu)

Kule meko, i-loop iminxeba __iter__, eqalisa ikhawuntara (self.n) kwaye ibuyisela into ye pizza ngokwayo (self).

Emva koko, i-loop iminxeba __next__ ukufumana itopping nganye ngokulandelelana.

UQuando __next__ wabuyisela zonke iziqholo, StopIteration iphosa okwahlukileyo kwaye i-loop ngoku iyazi ukuba akusekho kwanto yokuphinda iphinde iphinde iphinde iphinde iqale.

Ercole Palmeri

Ileta yeendaba entsha
Ungaphoswa zezona ndaba zibalulekileyo kutshintsho. Bhalisa ukuze uzifumane nge-imeyile.
tags: python

Amanqaku amva

Izibonelelo zamaphepha okufaka imibala kuBantwana-ihlabathi lomlingo kuyo yonke iminyaka

Ukuphuhlisa izakhono zemoto ngokufaka imibala kulungiselela abantwana izakhono ezinzima ezifana nokubhala. Ukufaka umbala...

2 Meyi 2024

Ikamva lilapha: Njani iShishini lokuThumela liTshintsha uQoqosho lweHlabathi

Icandelo lomkhosi wasemanzini ligunya lokwenyani loqoqosho lwehlabathi, elithe lajonga kwimarike ye-150 yeebhiliyoni...

1 Meyi 2024

Abapapashi kunye ne-OpenAI batyikitya izivumelwano zokulawula ukuhamba kolwazi oluqhutywe yiArtificial Intelligence

NgoMvulo ophelileyo, i-Financial Times ibhengeze isivumelwano kunye ne-OpenAI. I-FT ikhupha iilayisensi kubuntatheli bayo obukumgangatho wehlabathi…

30 Aprili 2024

Iintlawulo ze-Intanethi: Nantsi indlela Iinkonzo zokusasaza ezikwenza ukuba uHlawule ngonaphakade

Izigidi zabantu zihlawula iinkonzo zokusasaza, zihlawula umrhumo wenyanga. Luluvo oluqhelekileyo ukuba…

29 Aprili 2024