Artikel

Python lan cara majeng, dunder fungsi kanggo program luwih

Python minangka basa pamrograman sing apik banget, lan minangka bukti GitHub, uga minangka basa paling populer nomer loro ing taun 2022.

Kauntungan paling menarik saka Python yaiku komunitas programer sing akeh.

Kayane Python duwe paket kanggo panggunaan apa wae.

Ing jagad pemrograman Python sing wiyar, ana sawetara fitur sing asring ora digatekake dening para pamula, nanging penting banget ing ekosistem basa kasebut.

Metode sihir minangka sakumpulan metode pradefinites ing Python sing nyedhiyani fitur sintaksis khusus. Padha gampang dikenali dening dobel dashes ing awal lan pungkasan, kaya __init__, __call__, __len__ … lsp.

Metode Magis

Cara sihir ngidini obyek khusus tumindak padha karo jinis Python sing dibangun.

Ing artikel iki, kita bakal fokus ing fungsi dunder sing kuat. Kita bakal njelajah tujuane lan ngrembug babagan panggunaane.

Apa sampeyan wong anyar Python utawa programmer sing berpengalaman, artikel iki duwe tujuan kanggo menehi sampeyan pemahaman lengkap babagan fungsi Dunder, nggawe pengalaman coding Python luwih efisien lan nyenengake.

Elinga, keajaiban Python ora mung ana ing kesederhanaan lan fleksibilitas, nanging uga fitur sing kuat kaya fungsi Dunder.

__init__

Mbok fungsi dunder paling dhasar kabeh. Iki minangka cara sihir sing diarani Python kanthi otomatis nalika nggawe (utawa jeneng kasebut, initialize) obyek anyar.__init__

kelas pizza:
def __init__(self, size, topping):
dhewe.ukuran = ukuran
dhewe.topping = topping

# Saiki ayo nggawe pizza
my_pizza = Pizza('gedhe', ['pepperoni', 'jamur'])

print (my_pizza.size) # Iki bakal print: gedhe
print(my_pizza.toppings) # Iki bakal dicithak: ['pepperoni', 'jamur']

Ing conto iki, kelas sing diarani Pizza digawe. Kita nyiyapake fungsi __init__ kanggo nyakup paramèter sing bakal ditemtokake ing wektu wiwitan, lan nyetel minangka properti kanggo obyek khusus.

Ing kene, digunakake kanggo makili conto kelas. Dadi nalika kita nulis self.size = ukuran, kita ngomong, "Hei, obyek pizza iki nduweni ukuran atribut size, lan aku pengin dadi ukuran apa wae sing diwenehake nalika nggawe obyek kasebut".

__str__ lan __repr__

__Str__

Iki cara Piandel Python sing ngidini kita definish deskripsi kanggo item khusus kita.

Nalika sampeyan nyithak obyek utawa ngowahi dadi senar nggunakake str(), Python mriksa yen sampeyan duwe defiAku wis teka karo cara __str__ kanggo kelas obyek kasebut.

Yen mangkono, gunakake cara kasebut kanggo ngowahi obyek kasebut dadi senar.

Kita bisa ngluwihi conto Pizza kanggo kalebu fungsi __str__ kaya mangkene:

kelas Pizza: def __init__(self, ukuran, toppings): self.size = ukuran self.toppings = toppings def __str__(self): bali f"A {self.size} pizza karo {', '.join(self.toppings )}" my_pizza = Pizza('gedhe', ['pepperoni', 'jamur']) print(my_pizza) # Iki bakal dicithak: Pizza gedhe karo pepperoni, jamur
__repr__

Fungsi __str__ luwih saka cara informal kanggo njlèntrèhaké sifat obyek. Ing tangan liyane, __repr__ digunakake kanggo nyedhiyani luwih formal, gambaran rinci lan unambiguous saka obyek adat.

Yen sampeyan nelpon repr() ing obyek utawa sampeyan mung ngetik jeneng obyek menyang console, Python bakal golek cara __repr__.

Se __str__ iku ora definite, Python bakal nggunakake __repr__ minangka serep nalika nyoba kanggo print obyek utawa Ngonversi menyang senar. Dadi asring ide sing apik defirampung paling __repr__, sanajan sampeyan ora defimbakyu __str__.

Mangkene carane kita bisa defirampung __repr__ kanggo conto pizza kita:

kelas pizza:
def __init__(self, size, topping):
dhewe.ukuran = ukuran
dhewe.topping = topping

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

my_pizza = Pizza('gedhe', ['pepperoni', 'jamur'])
print(repr(my_pizza)) # Iki bakal dicithak: Pizza('gedhe', ['pepperoni', 'jamur'])

__repr__ menehi senar sing bisa mbukak minangka printah Python kanggo nggawé ulang obyek pizza, nalika __str__ menehi gambaran luwih manungsa. Muga-muga bisa mbantu sampeyan ngunyah metode dunder iki kanthi luwih apik!

__tambah__

Ing Python, kita kabeh ngerti manawa bisa nambah nomer nggunakake operator +, kaya 3 + 5.

Nanging apa yen kita pengin nambah conto sawetara obyek khusus?

Fungsi dunder __add__ iku ngidini kita nindakake mung sing. Iku menehi kita kemampuan kanggo definish prilaku operator + ing item pribadi kita.

Ing kapentingan konsistensi, ayo nganggep kita pengin defirampung prilaku saka + ing conto pizza kita. Ayo dadi ngomong yen kita nambah loro utawa luwih pizza bebarengan, iku bakal kanthi otomatis gabungke kabeh toppings. Iki bisa uga katon kaya:

kelas pizza:
def __init__(self, size, topping):
dhewe.ukuran = ukuran
dhewe.topping = topping

def __add__(self, other):
yen ora isinstance (liyane, Pizza):
mundhakaken TypeError("Sampeyan mung bisa nambah Pizza liyane!")
new_toppings = dhewe.toppings + liyane.toppings
bali Pizza(self.size, new_toppings)

# Ayo nggawe rong pizza
pizza1 = Pizza('gedhe', ['pepperoni', 'jamur'])
pizza2 = Pizza('gedhe', ['zaitun', 'nanas'])

# Lan saiki ayo "nambahake".
gabungan_pizza = pizza1 + pizza2

print(combined_pizza.toppings) # Iki bakal dicithak: ['pepperoni', 'jamur', 'zaitun', 'nanas']

Semono uga karo dunder __add__, kita uga bisa defingrampungake fungsi aritmetika liyane kayata __sub__ (kanthi nyuda nggunakake operator -) yaiku __mul__ (kanggo perkalian nggunakake operator *).

__len__

Cara dunder iki ngidini kita defirampung apa fungsi len() kudu bali kanggo item selaras kita.

Python migunakake len() kanggo entuk dawa utawa ukuran struktur data kayata dhaptar utawa senar.

Ing konteks conto, kita bisa ngomong yen "dawa" pizza yaiku jumlah topping sing diduweni. Mangkene carane kita bisa ngetrapake:

kelas pizza:
def __init__(self, size, topping):
dhewe.ukuran = ukuran
dhewe.topping = topping

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

# Ayo nggawe pizza
my_pizza = Pizza('gedhe', ['pepperoni', 'jamur', 'zaitun'])

print(len(my_pizza)) # Iki bakal dicithak: 3

Ing cara __len__, kita mung bali dawa dhaftar toppings. Saiki, len(my_pizza) iku bakal menehi pitutur marang kita carane akeh toppings ing my_pizza.

__ proses __

Cara dunder iki ngidini obyek bisa iterable, yaiku bisa digunakake ing daur ulang.

Kanggo nindakake iki, kita uga kudu defirampung fungsi __next__, Iki digunakake kanggo definish prilaku sing kudu ngasilake nilai sabanjure ing pengulangan. Sampeyan uga kudu menehi tandha iterable yen ora ana unsur liyane ing urutan kasebut. Kita biasane entuk iki kanthi mbuwang pengecualian StopIteration.

Kanggo conto pizza kita, ayo ngomong yen kita pengin ngganti topping. Kita bisa nggawe kelas Pizza iterable definendo metode __iter__:

kelas pizza:
def __init__(self, size, topping):
dhewe.ukuran = ukuran
dhewe.topping = topping

def __iter__(self):
dhewe.n = 0
bali dhewe

def __next__(self):
yen dhewe.n <len(self.toppings):
asil = self.toppings[self.n]
dhewe.n += 1
asil bali
liyane:
mundhakaken StopIteration

# Ayo nggawe pizza
my_pizza = Pizza('gedhe', ['pepperoni', 'jamur', 'zaitun'])

# Lan saiki ayo diulang maneh
kanggo topping ing my_pizza:
print (topping)

Ing kasus iki, telpon kanggo loop __iter__, kang initializes counter (self.n) lan ngasilake obyek pizza dhewe (self).

Banjur, kanggo telpon loop __next__ kanggo njaluk saben topping ing siji.

nalika __next__ bali kabeh bumbu, StopIteration mbalang pangecualian lan kanggo daur ulang saiki ngerti yen ora ana topping maneh lan bakal mbatalake proses pengulangan.

Ercole Palmeri

newsletter inovasi
Aja kantun warta paling penting babagan inovasi. Mlebu kanggo nampa wong-wong mau liwat email.
Tags: python

Artikel anyar

Veeam nduweni dhukungan paling lengkap kanggo ransomware, saka proteksi nganti respon lan pemulihan

Coveware dening Veeam bakal terus nyedhiyakake layanan respon insiden pemerasan cyber. Coveware bakal nawakake kemampuan forensik lan remediasi…

23 April 2024

Revolusi Ijo lan Digital: Kepiye Pangopènan Prediktif Ngowahi Industri Minyak & Gas

Pangopènan prediktif ngrevolusi sektor minyak & gas, kanthi pendekatan inovatif lan proaktif kanggo manajemen pabrik.…

22 April 2024

Regulator antitrust Inggris mundhakaken weker BigTech liwat GenAI

CMA UK wis ngetokake bebaya babagan prilaku Big Tech ing pasar intelijen buatan. Ana…

18 April 2024

Casa Green: revolusi energi kanggo masa depan sing lestari ing Italia

Keputusan "Case Green", sing dirumusake dening Uni Eropa kanggo ningkatake efisiensi energi bangunan, wis rampung proses legislatif kanthi…

18 April 2024