Ni agbaye ti o tobi ju ti siseto Python, awọn ẹya ara ẹrọ kan wa ti nigbagbogbo ko ṣe akiyesi nipasẹ awọn olubere, sibẹsibẹ ni pataki pataki ninu ilolupo ti ede naa.
Awọn ọna idan jẹ eto awọn ọna iṣaajudefinites ni Python ti o pese pataki sintactic awọn ẹya ara ẹrọ. Wọn ti wa ni awọn iṣọrọ mọ nipa wọn ė dashes ni ibẹrẹ ati opin, bi __init__, __call__, __len__
… etc.
Awọn ọna idan gba awọn ohun aṣa laaye lati huwa iru si awọn oriṣi Python ti a ṣe sinu.
Ninu nkan yii, a yoo dojukọ awọn iṣẹ dunder ti o lagbara. A yoo ṣawari idi wọn ati jiroro nipa lilo wọn.
Boya o jẹ alakobere Python tabi olupilẹṣẹ ti o ni iriri, nkan yii ni ero lati fun ọ ni oye pipe ti awọn iṣẹ Dunder, ṣiṣe iriri ifaminsi Python rẹ daradara ati igbadun.
Ranti, idan ti Python ko wa ni ayedero ati isọpọ rẹ nikan, ṣugbọn tun ni awọn ẹya ti o lagbara bi awọn iṣẹ Dunder.
Boya julọ ipilẹ dunder iṣẹ ti gbogbo. Eyi ni ọna idan ti Python pe laifọwọyi nigbakugba ti a ṣẹda (tabi bi orukọ ṣe daba, bẹrẹ) ohun titun kan.__init__
Pizza kilasi:
defi __init__(ara, iwọn, awọn toppings):
self.size = iwọn
self.toppings = toppings
# Bayi jẹ ki a ṣẹda pizza kan
my_pizza = Pizza ('tobi', ['pepperoni','olu'])
tẹjade (my_pizza.size) # Eyi yoo tẹjade: nla
sita(my_pizza.toppings) # Eyi yoo tẹjade: ['pepperoni', 'olu']
Ni apẹẹrẹ yii, a ṣẹda kilasi ti a pe ni Pizza. A ṣeto iṣẹ __init__ wa lati ni awọn paramita lati wa ni pato ni akoko ibẹrẹ, ati ṣeto wọn bi ohun-ini fun ohun aṣa wa.
Nibi, a lo lati ṣe aṣoju apẹẹrẹ ti kilasi naa. Nitorinaa nigba ti a ba kọ ara-ẹni.size = iwọn, a n sọ, “Hey, ohun elo pizza yii ni iwọn abuda kan size
, ati pe Mo fẹ ki o jẹ iwọn eyikeyi ti Mo pese nigbati mo ṣẹda nkan naa.
Eleyi jẹ Python ká idan ọna ti o fun laaye a definish apejuwe kan fun aṣa aṣa wa.
Nigbati o ba tẹ ohun kan sita tabi yi pada si okun nipa lilo str()
, Python ṣayẹwo ti o ba ni defiMo ti sọ wá soke pẹlu kan ọna __str__
fun awọn ti ohun ká kilasi.
Ti o ba jẹ bẹ, lo ọna yẹn lati yi ohun naa pada si okun.
A le faagun apẹẹrẹ Pizza wa lati ni iṣẹ kan __str__
bi wọnyi:
kilasi Pizza: def __init__ (ara, iwọn, toppings): self.size = iwọn self.toppings = toppings def __str__ (self): pada f"A {self.size} pizza pẹlu {', '.darapọ (self.toppings) )}" my_pizza = Pizza('tobi', ['pepperoni', 'olu']) tẹjade(pizza mi) # Eyi yoo tẹjade: pizza nla kan pẹlu pepperoni, olu
__repr__
Iṣẹ __str__ jẹ diẹ sii ti ọna aiṣedeede ti apejuwe awọn ohun-ini ti ohun kan. Ni apa keji, __repr__ ni a lo lati pese ilana diẹ sii, alaye ati alaye ti ko ni idaniloju ti ohun aṣa.
Ti o ba pe repr()
lori ohun kan tabi o kan tẹ orukọ ohun sinu console, Python yoo wa ọna kan __repr__
.
Se __str__
kii ṣe bẹ definite, Python yoo lo __repr__
bi afẹyinti nigbati o n gbiyanju lati tẹ nkan naa sita tabi yi pada si okun. Nitorina o jẹ imọran ti o dara nigbagbogbo defipari ni o kere __repr__
, paapa ti o ko ba ṣe bẹ defidara __str__
.
Eyi ni bii a ṣe le defipari __repr__
Fun apẹẹrẹ pizza wa:
Pizza kilasi:
defi __init__(ara, iwọn, awọn toppings):
self.size = iwọn
self.toppings = toppings
def __repr__ (ara):
pada f"Pizza ('{self.size}', {self.toppings})"
my_pizza = Pizza ('tobi', ['pepperoni','olu'])
tẹjade (repr(my_pizza)) # Eyi yoo tẹjade: Pizza ('nla', ['pepperoni', 'olu']))
__repr__
yoo fun ọ ni okun ti o le ṣiṣẹ bi aṣẹ Python lati tun ohun pizza pada, botilẹjẹpe __str__
yoo fun o kan diẹ eda eniyan apejuwe. Mo nireti pe o ṣe iranlọwọ fun ọ lati jẹ awọn ọna dunder wọnyi dara diẹ sii!
Ni Python, gbogbo wa mọ pe o ṣee ṣe lati ṣafikun awọn nọmba nipa lilo oniṣẹ +
, bi eleyi 3 + 5
.
Ṣugbọn kini ti a ba fẹ lati ṣafikun awọn apẹẹrẹ ti nkan aṣa kan?
Iṣẹ dunder __add__
ó jẹ́ ká lè ṣe bẹ́ẹ̀. O fun wa ni agbara lati definish awọn ihuwasi ti oniṣẹ +
lori awọn ohun elo ti ara ẹni.
Ni iwulo aitasera, jẹ ki a ro pe a fẹ defipari ihuwasi ti +
lori apẹẹrẹ pizza wa. Jẹ ká sọ pé nigbakugba ti a fi meji tabi diẹ ẹ sii pizzas papo, o yoo laifọwọyi parapo gbogbo wọn toppings. Eyi ni ohun ti o le dabi:
Pizza kilasi:
defi __init__(ara, iwọn, awọn toppings):
self.size = iwọn
self.toppings = toppings
def __ add__ (ara, miiran):
ti kii ba ṣe apẹẹrẹ (miiran, Pizza):
gbe IruError dide ("O le ṣafikun Pizza miiran nikan!")
new_toppings = self.toppings + other.toppings
pada Pizza (iwọn ara-ẹni, awọn tuntun_toppings)
# Jẹ ki a ṣẹda pizzas meji
pizza1 = Pizza ('tobi', ['pepperoni', 'olu'])
pizza2 = Pizza ('tobi', ['olifi',' ope oyinbo'])
# Ati nisisiyi jẹ ki a "fikun" wọn
idapo_pizza = pizza1 + pizza2
print(combined_pizza.toppings) # Eyi yoo tẹjade: ['pepperoni', 'olu', 'olifi', 'pineapple']
Bakanna si dunder __add__
, a tun le defipari awọn iṣẹ iṣiro miiran gẹgẹbi __sub__
(nipa iyokuro lilo oniṣẹ ẹrọ -
) ni __mul__
(fun isodipupo nipa lilo oniṣẹ ẹrọ *
).
Ọna dunder yii gba wa laaye lati defipari kini iṣẹ naa len()
gbọdọ pada fun wa ti adani awọn ohun kan.
Python nlo len()
lati gba gigun tabi iwọn igbekalẹ data gẹgẹbi atokọ tabi okun.
Ni ipo ti apẹẹrẹ wa, a le sọ pe "ipari" ti pizza ni nọmba awọn toppings ti o ni. Eyi ni bii a ṣe le ṣe imuse rẹ:
Pizza kilasi:
defi __init__(ara, iwọn, awọn toppings):
self.size = iwọn
self.toppings = toppings
defi __len__ (ara):
pada lẹn (self.toppings)
# Jẹ ki a ṣẹda pizza kan
my_pizza = Pizza ('tobi', ['pepperoni','olu','olifi'])
sita(len(mi_pizza)) # Eyi yoo tẹjade: 3
Ni awọn ọna __len__, a nikan da awọn ipari ti awọn akojọ toppings
. Bayi, len(my_pizza)
yoo sọ fun wa iye awọn toppings ti o wa lori rẹ my_pizza
.
Ọna dunder yii ngbanilaaye awọn nkan lati jẹ iterable, ie o le ṣee lo ni fun lupu.
Lati ṣe eyi, a gbọdọ tun defipari iṣẹ naa __next__
, Eyi ni a lo fun definish ihuwasi ti o yẹ ki o pada nigbamii ti iye ninu awọn aṣetunṣe. O yẹ ki o tun ṣe ifihan agbara iterable lori iṣẹlẹ ti ko si awọn eroja diẹ sii ni ọkọọkan. Nigbagbogbo a ṣaṣeyọri eyi nipa jiju imukuro StopIteration
.
Fun apẹẹrẹ pizza wa, jẹ ki a sọ pe a fẹ ṣe atunwo awọn toppings naa. A le ṣe kilaasi Pizza wa ni itara definendo a ọna __iter__
:
Pizza kilasi:
defi __init__(ara, iwọn, awọn toppings):
self.size = iwọn
self.toppings = toppings
defi __iter__(ara):
ara.n = 0
pada funrararẹ
defi __tókàn__(ara):
ti o ba ti ara.n < len (self.toppings):
esi = self.toppings [self.n]
ara-ẹni.n += 1
esi pada
omiiran:
gbe StopIteration
# Jẹ ki a ṣẹda pizza kan
my_pizza = Pizza ('tobi', ['pepperoni','olu','olifi'])
# Ati nisisiyi jẹ ki a ṣe atunwo lori rẹ
fun topping ni my_pizza:
titẹ sita (topping)
Ni idi eyi, awọn fun awọn ipe lupu __iter__
, eyi ti initializes a counter (self.n)
ati ki o pada pizza ohun ara (self)
.
Lẹhinna, fun awọn ipe lupu __next__
lati gba kọọkan topping ni Tan.
Quando __next__
pada gbogbo awọn akoko, StopIteration
o ju ohun sile ati awọn fun lupu bayi mọ pe nibẹ ni o wa ko si siwaju sii toppings ati ki yoo abort awọn aṣetunṣe ilana.
Ercole Palmeri
Ni ọjọ Aarọ to kọja, Awọn akoko Iṣowo kede adehun kan pẹlu OpenAI. FT ṣe iwe-aṣẹ iwe-akọọlẹ agbaye rẹ…
Awọn miliọnu eniyan sanwo fun awọn iṣẹ ṣiṣanwọle, san awọn idiyele ṣiṣe alabapin oṣooṣu. O jẹ ero ti o wọpọ pe o…
Coveware nipasẹ Veeam yoo tẹsiwaju lati pese awọn iṣẹ esi iṣẹlẹ ikọlu cyber. Coveware yoo funni ni awọn oniwadi ati awọn agbara atunṣe…
Itọju isọtẹlẹ jẹ iyipada ti eka epo & gaasi, pẹlu imotuntun ati ọna imudani si iṣakoso ọgbin.…