Ìwé

Python ati awọn ọna ilọsiwaju, awọn iṣẹ dunder fun siseto to dara julọ

Python jẹ ede siseto ikọja, ati gẹgẹbi ẹri nipasẹ GitHub, tun jẹ ede keji olokiki julọ ni 2022.

Awọn anfani ti o nifẹ julọ ti Python jẹ agbegbe nla ti awọn pirogirama.

O dabi pe Python ni package fun eyikeyi ọran lilo.

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

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.

__init__

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.

__str__ ati __atunṣe__

__Str__

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!

__afikun__

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ọ *).

__len__

Ọ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.

__ ilana __

Ọ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

Iwe iroyin Innovation
Maṣe padanu awọn iroyin pataki julọ lori isọdọtun. Forukọsilẹ lati gba wọn nipasẹ imeeli.
Tags: Python

Awọn iwe ti o ṣẹṣẹ

Awọn olutẹwe ati OpenAI fowo si awọn adehun lati ṣe ilana ṣiṣan ti alaye ti a ṣe ilana nipasẹ Imọran Artificial

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ẹ…

30 Kẹrin 2024

Awọn sisanwo ori ayelujara: Eyi ni Bii Awọn iṣẹ ṣiṣanwọle jẹ ki o sanwo lailai

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…

29 Kẹrin 2024

Veeam ṣe ẹya atilẹyin okeerẹ julọ fun ransomware, lati aabo si esi ati imularada

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…

23 Kẹrin 2024

Alawọ ewe ati Iyika oni-nọmba: Bawo ni Itọju Asọtẹlẹ ti n Yipada Ile-iṣẹ Epo & Gaasi

Itọju isọtẹlẹ jẹ iyipada ti eka epo & gaasi, pẹlu imotuntun ati ọna imudani si iṣakoso ọgbin.…

22 Kẹrin 2024