I roto i te ao nui o te kaupapa Python, he huinga o nga ahuatanga kaore e kitea e te hunga hou, engari he mea nui ki te puunaha hauropi o te reo.
Ko nga tikanga makutu he huinga o nga tikanga o muadefinites i roto i te Python e whakarato ana i nga ahuatanga syntactic motuhake. He ngawari te mohio ki a raatau ma o raatau tohu takirua i te timatanga me te mutunga, penei __init__, __call__, __len__
… etc.
Ka taea e nga tikanga makutu te ahua o nga mea ritenga ki nga momo Python kua hangaia.
I roto i tenei tuhinga, ka arotahi tatou ki nga mahi kaha o te dunder. Ka tuhurahia e maatau te kaupapa me te korero mo te whakamahinga.
Ahakoa he tauhou a Python koe, he kaiwhakatakoto kaupapa mohio ranei, e whai ana tenei tuhinga ki te whakarato ki a koe i te maaramatanga matawhānui mo nga mahi a Dunder, kia pai ake ai to wheako tohu Python.
Kia maumahara, ko te makutu o Python ehara i te mea ko te ngawari me te ngawari, engari ko nga ahuatanga kaha penei i nga mahi a Dunder.
Pea ko te tino mahi dunder taketake o te katoa. Koinei te tikanga makutu e karanga aunoatia ana e Python i nga wa katoa ka waihangahia e matou (i runga ranei i te ingoa e kii ana, arawhiti) he ahanoa hou.__init__
Piha karaehe:
def __init__(whaiaro, rahi, toppings):
whaiaro.rahi = rahi
whaiaro.toppings = toppings
# Inaianei me hanga he pizza
my_pizza = Pizza('nui', ['pepperoni', 'harore'])
tā(my_pizza.size) # Ka tā tēnei: nui
tā(my_pizza.toppings) # Ka tā: ['pepperoni', 'harore']
I tenei tauira, ka hangaia he karaehe e kiia nei ko Pizza. I whakaturia e matou ta matou mahi __init__ ki te whakauru i nga tawhā ka tohua i te wa arawhiti, ka whakatauhia hei taonga mo a maatau mea ritenga.
I konei, ka whakamahia hei tohu i te tauira o te karaehe. Na ka tuhi tatou self.size = rahi, kei te kii tatou, "Hey, he rahi huanga to tenei ahanoa pizza size
, a ko taku hiahia kia rite ki te rahi i hoatu e ahau i te wa i hanga ai e au te ahanoa”.
Koinei te tikanga makutu a Python e taea ai e tatou definish he whakaahuatanga mo a maatau mea ritenga.
Ina ta koe i tetahi mea, ka huri ranei ki te aho ma te whakamahi str()
, Tirohia te Python mena kei a koe defiKua puta mai he tikanga __str__
mo te akomanga o taua mea.
Ki te pera, whakamahia taua tikanga hei huri i te ahanoa ki te aho.
Ka taea e tatou te whakawhānui atu i to tatou tauira Pizza ki te whakauru i tetahi mahi __str__
e whai ake nei:
Piha akomanga: def __init__(whaiaro, rahi, toppings): whaiaro.size = rahi self.toppings = toppings def __str__(self): whakahokia f"He {self.size} pizza with {', '.join(self.toppings )}" my_pizza = Pizza('nui', ['pepperoni', 'harore']) tā(my_pizza) # Ka tā tenei: He pizza nui me te pepperoni, harore
__repr__
Ko te mahi __str__ he tikanga opaki mo te whakaahua i nga ahuatanga o tetahi mea. I tetahi atu taha, ka whakamahia te __repr__ ki te whakarato i tetahi whakaahuatanga okawa ake, taipitopito me te maamaa mo te ahanoa ritenga.
Ki te waea koe repr()
i runga i tetahi ahanoa ka pato noa ranei koe i te ingoa ahanoa ki te papatohu, ka rapua e Python tetahi tikanga __repr__
.
Se __str__
ehara i te mea defii te ahiahi, ka whakamahia e Python __repr__
hei tārua ina ngana ana ki te tā i te ahanoa ki te huri ranei ki te aho. No reira he whakaaro pai tonu defiwhakaoti i te iti rawa __repr__
, ahakoa kaore koe defipai __str__
.
Anei me pehea e taea ai e matou defimutu __repr__
mo ta maatau tauira pizza:
Piha karaehe:
def __init__(whaiaro, rahi, toppings):
whaiaro.rahi = rahi
whaiaro.toppings = toppings
def __repr__(whaiaro):
whakahokia f"Pizza('{self.size}', {self.toppings})"
my_pizza = Pizza('nui', ['pepperoni', 'harore'])
tā(repr(my_pizza)) # Ka tā tēnei: Pizza('nui', ['pepperoni', 'harore'])
__repr__
ka hoatu he aho ki a koe ka taea e koe te whakahaere hei whakahau Python ki te hanga ano i te ahanoa pizza, engari __str__
ka hoatu ki a koe he whakaahuatanga tangata ake. Ko taku tumanako ka awhina koe ki te ngaungau i enei tikanga dunder kia pai ake!
I roto i te Python, e mohio ana tatou ka taea te taapiri i nga nama ma te whakamahi i te kaiwhakahaere +
, rite 3 + 5
.
Engari ka pehea mena ka hiahia taatau ki te taapiri i nga tauira o etahi mea ritenga?
Ko te mahi dunder __add__
ka taea e tatou te mahi pera. Ka homai e ia te kaha ki a tatou definish te whanonga o te kaiwhakahaere +
i runga i a maatau taonga whaiaro.
I roto i te hiahia o te riterite, me whakaaro tatou e hiahia ana tatou defimutu te whanonga o +
i runga i ta maatau tauira pizza. Me kii tatou ka taapirihia kia rua, neke atu ranei nga pizzas, ka whakakotahi aunoa i o ratou toppings katoa. Anei te ahua o te ahua:
Piha karaehe:
def __init__(whaiaro, rahi, toppings):
whaiaro.rahi = rahi
whaiaro.toppings = toppings
def __add__(whaiaro, atu):
ki te kore he isinstance(etahi atu, Pizza):
whakaarahia TypeError("Ka taea e koe anake te taapiri i tetahi atu Pizza!")
new_toppings = whaiaro.toppings + other.toppings
whakahokia Pizza(self.size, new_toppings)
# Me hanga e rua nga pizzas
pizza1 = Pizza('nui', ['pepperoni', 'harore'])
pizza2 = Pizza('nui', ['olive', 'pineaporo'])
# Na inaianei me "tapiri" ratou
whakakotahi_pizza = pizza1 + pizza2
tā(combined_pizza.toppings) # Ka tā tēnei: ['pepperoni', 'harore', 'olive', 'pineapple']
He rite ano ki te dunder __add__
, ka taea hoki e tatou defiwhakaoti i etahi atu mahi tatau penei i __sub__
(ma te tangohanga ma te whakamahi i te kaiwhakahaere -
) ā __mul__
(mo te whakarea ma te whakamahi i te kaiwhakahaere *
).
Ma tenei tikanga dunder ka taea e taatau defioti te mahi len()
me hoki mai mo a maatau mea kua whakaritea.
Ka whakamahia e Python len()
ki te tiki i te roa, te rahi ranei o te hanganga raraunga penei i te rarangi, aho ranei.
I roto i te horopaki o to tatou tauira, ka taea e tatou te kii ko te "roa" o te pizza ko te maha o nga toppings kei a ia. Anei me pehea e taea ai e matou te whakatinana:
Piha karaehe:
def __init__(whaiaro, rahi, toppings):
whaiaro.rahi = rahi
whaiaro.toppings = toppings
def __len__(whaiaro):
whakahokia len(self.toppings)
# Me hanga he pizza
my_pizza = Pizza('nui', ['pepperoni', 'harore', ' oriwa'])
tā(len(my_pizza)) # Ka tā tēnei: 3
I te tikanga __len__, ka whakahokia noa te roa o te rarangi toppings
. Na, len(my_pizza)
ka whakaatu mai e hia nga toppings kei runga my_pizza
.
Ko tenei tikanga dunder ka taea e nga mea te huri, ara, ka taea te whakamahi i roto i te mo te koropiko.
Ki te mahi i tenei, me maatau ano defiwhakaoti i te mahi __next__
, Ka whakamahia tenei mo defiwhakamutua te whanonga e hoki mai ai te uara e whai ake nei i roto i te whitiwhitinga. Me tohu ano i te kaitahuri i runga i te mea kua kore he huānga o te raupapa. I te nuinga o te wa ka tutuki tenei ma te maka i tetahi tuunga StopIteration
.
Mo ta maatau tauira pizza, me kii e hiahia ana matou ki te huri i nga toppings. Ka taea e taatau te whakarite i to maatau karaehe Pizza definendo a tikanga __iter__
:
Piha karaehe:
def __init__(whaiaro, rahi, toppings):
whaiaro.rahi = rahi
whaiaro.toppings = toppings
def __iter__(whaiaro):
whaiaro.n = 0
hoki mai
def __next__(whaiaro):
if self.n < len(self.toppings):
hua = self.toppings[self.n]
whaiaro.n += 1
hua whakahoki
atu:
whakaarahia StopIteration
# Me hanga he pizza
my_pizza = Pizza('nui', ['pepperoni', 'harore', ' oriwa'])
# Inaianei me huri ano
mo te tihi i taku_pizza:
tā(topping)
I roto i tenei take, ka karanga te mo te koropiko __iter__
, ka arawhiti i te porotiti (self.n)
me te whakahoki ano i te mea pizza (self)
.
Na, ka karanga te mo te koropiko __next__
ki te tiki ia topping i roto i te huri.
Anei __next__
whakahokia nga mea kakara katoa, StopIteration
ka maka he okotahi ka mohio te mo te karekau kua kore he toppings ka mutu te tukanga whitiwhiti.
Ercole Palmeri
I te Mane kua hipa, i panuitia e te Financial Times tetahi mahi me OpenAI. Ka raihana a FT i tana kairipoata o te ao…
E hia miriona nga taangata e utu ana mo nga ratonga rerema, e utu ana i nga utu ohaurunga ia marama. Ko te whakaaro noa ko koe…
Ka whakarato tonu a Coveware na Veeam i nga ratonga whakautu mai i nga aitua. Ka tukuna e Coveware nga mahi whakawai me te whakatikatika…
Ko te tiaki matapae kei te huri haere i te waahanga hinu me te hau, me te huarahi auaha me te kaha ki te whakahaere tipu.…