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:

Artikel sing gegandhengan
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

Fungsi statistik Excel: Tutorial karo conto, bagean siji

Excel nyedhiyakake macem-macem fungsi statistik sing nindakake petungan saka rata-rata dhasar, median lan mode kanggo distribusi…

1 Oktober 2023

Tabel Pivot: apa iku, carane nggawe ing Excel lan Google. Tutorial karo conto

Tabel pivot minangka teknik analisis spreadsheet. Dheweke ngidini pamula lengkap kanthi pengalaman nol…

30 Settembre 2023

Masalah Hak Cipta

Ing ngisor iki minangka artikel kaping pindho lan pungkasan saka buletin iki khusus kanggo hubungan antarane Privasi lan Hak Cipta saka…

30 Settembre 2023

Inovasi kanggo mobilitas listrik lan jaringan cerdas: baterei kalsium-ion anyar

Proyek ACTEA, ENEA lan Universitas Sapienza Roma bakal ngembangake baterei ion kalsium anyar. Baterei kalsium-ion anyar minangka alternatif kanggo…

30 Settembre 2023

Sorotan saka Riset lan Inovasi Ortopedi Rapat Tahunan AOFAS 2023

Luwih saka 900 ahli bedah kaki lan tungkak ortopedi, praktisi kesehatan lanjutan, warga ortopedi lan mahasiswa medis melu…

28 Settembre 2023

Robotika boom: 2022 robot diinstal ing saindenging jagad ing taun 531.000 wae. Perkiraan wutah 35% saben taun antarane saiki lan 2027. LAPORAN PROTOLABS

Miturut laporan Protolabs paling anyar babagan robotika kanggo produksi, meh katelu (32%) responden percaya yen ing sawetara taun sabanjure ...

28 Settembre 2023

CNH dianugerahi ing Agritechnica Innovation Awards kanggo teknologi ing bidang pertanian

CNH setya banget kanggo ngembangake teknologi kanggo nggawe pertanian luwih gampang, luwih efisien lan lestari kanggo…

27 Settembre 2023

NTT lan Qualcomm milih kolaborasi kanggo nyurung AI ngluwihi watese

Langkah strategis bakal nggampangake pangembangan luwih cepet kanggo adopsi ekosistem pribadi 5G kanggo kabeh piranti digital NTT ngumumake…

27 Settembre 2023

Neuralink miwiti rekrutmen kanggo uji klinis pertama ing manungsa saka implan otak

Neuralink, startup neurotech sing diduweni dening Elon Musk, bubar ngumumake bakal miwiti rekrut pasien kanggo…

26 Settembre 2023

Loop Privasi: intelijen buatan ing labirin Privasi lan Hak Cipta

Iki minangka sing pertama saka rong artikel sing dakkandhakake babagan hubungan sing alus antarane Privasi lan Hak Cipta ing tangan siji,…

26 Settembre 2023