I ka honua nui o ka polokalamu Python, aia kekahi mau hiʻohiʻona i ʻike pinepine ʻole ʻia e ka poʻe hoʻomaka, akā he koʻikoʻi koʻikoʻi i ka kaiaola o ka ʻōlelo.
ʻO nā ʻano hana hoʻokalakupua he hoʻonohonoho muadefii hoʻopaʻa ʻia ma Python e hāʻawi i kahi hana syntactic kūikawā. Hoʻomaopopo maʻalahi lākou e kā lākou mau kaha pālua i ka hoʻomaka a me ka hopena, e like me __init__, __call__, __len__
… etc.
Hāʻawi nā hana kilokilo i nā mea maʻamau e hana like me nā ʻano Python i kūkulu ʻia.
Ma kēia ʻatikala, e nānā mākou i nā hana dunder ikaika. E ʻimi mākou i kā lākou kumu a kūkākūkā i kā lākou hoʻohana.
Inā ʻoe he Python novice a i ʻole ka mea papahana ʻike, manaʻo kēia ʻatikala e hāʻawi iā ʻoe i kahi ʻike piha o nā hana Dunder, e hoʻolilo i kāu ʻike Python coding i ʻoi aku ka maikaʻi a me ka leʻaleʻa.
E hoʻomanaʻo, ʻaʻole wale ka mea kilokilo o Python i kona maʻalahi a me ka versatility, akā i loko o kāna mau hiʻohiʻona ikaika e like me nā hana Dunder.
ʻO ka hana dunder maʻamau paha o nā mea a pau. ʻO kēia ke ʻano hana hoʻokalakupua a Python e kāhea maʻalahi ai i nā manawa a mākou e hana ai (a i ʻole e like me ka inoa e kuhikuhi ai, hoʻomaka) i kahi mea hou.__init__
papa Pizza:
def __init__(self, size, toppings):
iho.nui = nui
self.toppings = kāpalapala
# E hana mākou i kahi pizza
my_pizza = Pizza('nui', ['pepperoni', 'halo'])
paʻi(my_pizza.size) # E paʻi kēia: nui
print(my_pizza.toppings) # E paʻi kēia: ['pepperoni', 'mushrooms']
Ma kēia laʻana, hana ʻia kahi papa i kapa ʻia ʻo Pizza. Hoʻonohonoho mākou i kā mākou hana __init__ e hoʻokomo i nā ʻāpana e kuhikuhi ʻia i ka manawa hoʻomaka, a hoʻonoho iā lākou i waiwai no kā mākou mea maʻamau.
Maʻaneʻi, hoʻohana ʻia ia e hōʻike i ke ʻano o ka papa. No laila, ke kākau mākou iā self.size = nui, ke ʻōlelo nei mākou, "E, he ʻano nui kēia mea pizza size
, a makemake wau e like me ka nui aʻu i hāʻawi ai i ka wā i hana ai au i ka mea".
ʻO kēia ka hana kilokilo a Python e hiki ai iā mākou ke hana definite kahi wehewehe no kā mākou mea maʻamau.
Ke paʻi ʻoe i kahi mea a hoʻololi paha i kahi kaula me ka hoʻohana ʻana str()
, Nānā Python inā loaʻa iā ʻoe defihoʻopau i kahi ala __str__
no ka papa o ia mea.
Inā pēlā, e hoʻohana i kēlā ʻano hana e hoʻololi i ka mea i kahi kaula.
Hiki iā mākou ke hoʻonui i kā mākou Pizza laʻana e hoʻokomo i kahi hana __str__
penei:
papa Pizza: def __init__(self.size, toppings): self.size = size self.toppings = toppings def __str__(self): ho'iho'i f"A {self.size} pizza with {', '.join(self.toppings )}" my_pizza = Pizza('nui', ['pepperoni', 'mushrooms']) paʻi(my_pizza) # E paʻi kēia: He pizza nui me ka pepperoni, nā halo.
__repr__
ʻO ka hana __str__ he ala ʻike ʻole ia e wehewehe i nā waiwai o kahi mea. Ma ka ʻaoʻao ʻē aʻe, hoʻohana ʻia ʻo __repr__ e hāʻawi i kahi wehewehe kikoʻī, kikoʻī a maopopo ʻole o ka mea maʻamau.
Inā kāhea ʻoe repr()
ma kahi mea a i ʻole ʻoe e kākau i ka inoa mea i loko o ka console, e ʻimi ʻo Python i kahi ala __repr__
.
Se __str__
ʻaʻole ia definite, e hoʻohana ʻo Python __repr__
ma ke ʻano he hoʻihoʻi i ka wā e hoʻāʻo ai e paʻi i ka mea a hoʻololi paha i kahi kaula. No laila he manaʻo maikaʻi loa ia defipau ma ka liʻiliʻi __repr__
, inā ʻaʻole ʻoe defipau __str__
.
Eia ka mea hiki iā mākou defihoʻopau __repr__
no kā mākou laʻana pizza:
papa Pizza:
def __init__(self, size, toppings):
iho.nui = nui
self.toppings = kāpalapala
def __repr__(self):
hoʻihoʻi f"Pizza('{self.size}', {self.toppings})"
my_pizza = Pizza('nui', ['pepperoni', 'halo'])
paʻi(repr(my_pizza)) # E paʻi kēia: Pizza('nui', ['pepperoni', 'halo'])
__repr__
hāʻawi iā ʻoe i kahi kaula hiki iā ʻoe ke holo ma ke ʻano he kauoha Python e hana hou i ka mea pizza, akā __str__
hāʻawi iā ʻoe i kahi wehewehe kanaka hou aʻe. Manaʻo wau e kōkua ʻoe iā ʻoe e ʻoi aku ka maikaʻi o kēia mau ala dunder!
Ma Python, ʻike mākou a pau hiki ke hoʻohui i nā helu me ka hoʻohana ʻana i ka mea hoʻohana +
, like 3 + 5
.
Akā pehea inā makemake mākou e hoʻohui i nā manawa o kekahi mea maʻamau?
ʻO ka hana dunder __add__
hiki iā mākou ke hana pēlā. Hāʻawi ia iā mākou i ka manawa e defihoʻomaʻemaʻe i ke ʻano o ka mea hoʻohana +
ma kā mākou mau mea pilikino.
I ka makemake o ka paʻa, e manaʻo mākou makemake mākou definite ke ano o +
ma kā mākou laʻana pizza. E ʻōlelo kākou i kēlā me kēia manawa a mākou e hoʻohui pū ai i ʻelua a ʻoi aku paha nā pizzas, e hoʻohui ʻokoʻa ia i kā lākou toppings āpau. Penei paha kona ano:
papa Pizza:
def __init__(self, size, toppings):
iho.nui = nui
self.toppings = kāpalapala
def __add__(self, other):
inā ʻaʻole isinstance('ē aʻe, Pizza):
hoʻokiʻekiʻe TypeError("Hiki iā ʻoe ke hoʻohui i kahi Pizza ʻē aʻe!")
new_toppings = self.toppings + other.toppings
hoʻihoʻi i ka Pizza(self.size, new_toppings)
# E hana mākou i ʻelua pizzas
pizza1 = Pizza('nui', ['pepperoni', 'halo'])
pizza2 = Pizza('nui', ['olive', 'pineapple'])
# A i kēia manawa e "hoʻohui" iā lākou
hui_pizza = pizza1 + pizza2
print(combined_pizza.toppings) # E paʻi kēia: ['pepperoni', 'mushroom', 'olive', 'pineapple']
Like me ka dunder __add__
, hiki nō iā mākou definite nā hana helu ʻē aʻe e like me __sub__
(ma ka unuhi ʻana me ka hoʻohana ʻana i ka mea hoʻohana -
) ' __mul__
(no ka hoonui ana me ka mea hoohana *
).
ʻO kēia ala dunder hiki iā mākou ke definish he aha ka hana len()
pono e hoʻi mai no kā mākou mau mea i hana ʻia.
Hoʻohana ʻo Python len()
e kiʻi i ka lōʻihi a i ʻole ka nui o kahi hoʻolālā ʻikepili e like me ka papa inoa a i ʻole ke kaula.
Ma ka pōʻaiapili o kā mākou laʻana, hiki iā mākou ke ʻōlelo ʻo ka "lōʻihi" o kahi pizza ka helu o nā toppings i loaʻa iā ia. Eia pehea mākou e hoʻokō ai:
papa Pizza:
def __init__(self, size, toppings):
iho.nui = nui
self.toppings = kāpalapala
def __len__(self):
hoihoi len(self.toppings)
# E hana kākou i ka pizza
my_pizza = Pizza('nui', ['pepperoni', 'halo', 'oliva'])
paʻi(len(my_pizza)) # E paʻi kēia: 3
Ma ke ʻano __len__, hoʻihoʻi wale mākou i ka lōʻihi o ka papa inoa toppings
. I kēia manawa, len(my_pizza)
e haʻi mai iā mākou i ka nui o nā toppings ma luna my_pizza
.
Hiki i kēia ʻano dunder ke hoʻololi i nā mea, ʻo ia hoʻi, hiki ke hoʻohana ʻia i loko o ka loop loop.
No ka hana ʻana i kēia, pono mākou defihoʻopau i ka hana __next__
, Hoʻohana ʻia kēia no defie hoʻopau i ka hana e hoʻihoʻi i ka waiwai aʻe i ka ʻike. Eia kekahi, pono ia e hōʻailona i ka iterable i ka hanana ʻaʻohe mea hou i ke kaʻina. Hoʻokō maʻamau mākou i kēia ma ka hāpai ʻana i kahi ʻokoʻa StopIteration
.
No kā mākou hiʻohiʻona pizza, e ʻōlelo mākou makemake mākou e hoʻomaʻamaʻa i nā toppings. Hiki iā mākou ke hana i kā mākou papa Pizza iterable defihaawi ana i ke ano __iter__
:
papa Pizza:
def __init__(self, size, toppings):
iho.nui = nui
self.toppings = kāpalapala
def __iter__(self):
iho.n = 0
hoʻihoʻi iā ʻoe iho
def __next__(self):
ina iho.n < len(self.toppings):
hopena = self.toppings[self.n]
iho.n += 1
hopena hoʻihoʻi
ʻē aʻe:
hoʻokiʻekiʻe StopIteration
# E hana kākou i ka pizza
my_pizza = Pizza('nui', ['pepperoni', 'halo', 'oliva'])
# A i kēia manawa e hoʻomau hou aku kāua
no ka ʻai ʻana i kaʻu_pizza:
paʻi (topping)
I kēia hihia, kāhea ka loop loop __iter__
, ka mea e hoʻomaka i kahi counter (self.n)
a hoʻihoʻi i ka mea pizza ponoʻī (self)
.
A laila, kāhea ka loop for __next__
e kiʻi i kēlā me kēia topping i ka huli.
ka wā __next__
hoʻihoʻi i nā mea ʻala a pau, StopIteration
hoʻolei ia i kahi ʻokoʻa a ʻike ka loop for i kēia manawa ʻaʻohe mea hou a no laila e kāpae i ke kaʻina hana.
Ercole Palmeri
He mana hoʻokele waiwai maoli ka ʻāpana moana, kahi i hoʻokele i kahi mākeke 150 biliona ...
I ka Pōʻakahi i hala, ua hoʻolaha ka Financial Times i kahi kuʻikahi me OpenAI. Laikini ʻo FT i kāna nūpepa papa honua…
E uku ana nā miliona o ka poʻe no nā lawelawe streaming, e uku ana i nā uku kau inoa o kēlā me kēia mahina. He manaʻo maʻamau ʻoe…
E hoʻomau ʻo Coveware e Veeam i ka hoʻolako ʻana i nā lawelawe pane ʻana i ka hanana cyber extortion. E hāʻawi ʻo Coveware i nā forensics a me nā mana hoʻoponopono…