Artikel

Python dan metode lanjutan, fungsi dunder untuk pemrograman yang lebih baik

Python adalah bahasa pemrograman yang luar biasa, dan sebagaimana dibuktikan oleh GitHub, juga merupakan bahasa terpopuler kedua di tahun 2022.

Keuntungan paling menarik dari Python adalah komunitas programmer yang besar.

Tampaknya Python memiliki paket untuk semua kasus penggunaan.

Di dunia pemrograman Python yang luas, ada serangkaian fitur yang sering luput dari perhatian pemula, namun memiliki arti penting yang signifikan dalam ekosistem bahasa tersebut.

Metode ajaib adalah seperangkat metode pradefinites dengan Python yang menyediakan fitur sintaksis khusus. Mereka mudah dikenali dengan tanda hubung ganda di awal dan akhir, seperti __init__, __call__, __len__ … dll.

Metode Ajaib

Metode ajaib memungkinkan objek khusus berperilaku mirip dengan tipe Python bawaan.

Pada artikel ini, kita akan fokus pada fungsi dunder yang kuat. Kami akan mengeksplorasi tujuan mereka dan mendiskusikan penggunaannya.

Apakah Anda seorang pemula Python atau programmer berpengalaman, artikel ini bertujuan untuk memberi Anda pemahaman yang komprehensif tentang fungsi Dunder, membuat pengalaman pengkodean Python Anda lebih efisien dan menyenangkan.

Ingat, keajaiban Python tidak hanya terletak pada kesederhanaan dan keserbagunaannya, tetapi juga pada fitur-fiturnya yang kuat seperti fungsi Dunder.

__init__

Mungkin fungsi dunder paling dasar dari semuanya. Ini adalah metode ajaib yang secara otomatis dipanggil oleh Python setiap kali kita membuat (atau seperti namanya, menginisialisasi) objek baru.__init__

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

# Sekarang mari kita membuat pizza
my_pizza = Pizza('besar', ['pepperoni', 'jamur'])

print(my_pizza.size) # Ini akan mencetak: besar
print(my_pizza.toppings) # Ini akan mencetak: ['pepperoni', 'mushrooms']

Dalam contoh ini, kelas bernama Pizza dibuat. Kami menyiapkan fungsi __init__ kami untuk menyertakan parameter yang akan ditentukan pada waktu inisialisasi, dan menetapkannya sebagai properti untuk objek kustom kami.

Di sini, ini digunakan untuk mewakili instance kelas. Jadi saat kita menulis self.size = size, kita berkata, "Hei, objek pizza ini memiliki ukuran atribut size, dan saya ingin ukurannya berapa pun yang saya berikan saat membuat objek”.

__str__ dan __repr__

__Str__

Ini adalah metode ajaib Python yang memungkinkan kita melakukannya defiselesaikan deskripsi untuk item kustom kami.

Saat Anda mencetak objek atau mengonversinya menjadi string menggunakan str(), Python periksa apakah sudah defiSaya telah menemukan sebuah metode __str__ untuk kelas objek itu.

Jika demikian, gunakan metode itu untuk mengonversi objek menjadi string.

Kita dapat memperluas contoh Pizza kita untuk menyertakan sebuah fungsi __str__ sebagai berikut:

kelas Pizza: def __init__(self, size, topping): self.size = size self.toppings = topping def __str__(self): kembalikan f"A {self.size} pizza dengan {', '.join(self.toppings )}" my_pizza = Pizza('large', ['pepperoni', 'mushrooms']) print(my_pizza) # Ini akan mencetak: Pizza besar dengan pepperoni, jamur
__repr__

Fungsi __str__ lebih merupakan cara informal untuk mendeskripsikan properti suatu objek. Di sisi lain, __repr__ digunakan untuk memberikan deskripsi objek khusus yang lebih formal, terperinci, dan tidak ambigu.

Jika Anda menelepon repr() pada objek atau Anda cukup mengetikkan nama objek ke dalam konsol, Python akan mencari metode __repr__.

Se __str__ bukan itu definite, Python akan digunakan __repr__ sebagai cadangan saat mencoba mencetak objek atau mengubahnya menjadi string. Jadi itu sering kali merupakan ide yang bagus defimenyelesaikan setidaknya __repr__, bahkan jika Anda tidak melakukannya defibagus __str__.

Inilah cara kami bisa defimenyelesaikan __repr__ untuk contoh pizza kami:

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

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

my_pizza = Pizza('besar', ['pepperoni', 'jamur'])
print(repr(my_pizza)) # Ini akan mencetak: Pizza('besar', ['pepperoni', 'jamur'])

__repr__ memberi Anda string yang dapat Anda jalankan sebagai perintah Python untuk membuat ulang objek pizza, sedangkan __str__ memberi Anda deskripsi yang lebih manusiawi. Saya harap ini membantu Anda mengunyah metode dunder ini sedikit lebih baik!

__menambahkan__

Dalam Python, kita semua tahu bahwa menambahkan angka dapat dilakukan dengan menggunakan operator +, Seperti 3 + 5.

Tetapi bagaimana jika kita ingin menambahkan instance dari beberapa objek khusus?

Fungsi dunder __add__ itu memungkinkan kita untuk melakukan hal itu. Ini memberi kita kemampuan untuk defimenyelesaikan perilaku operator + pada item pribadi kami.

Demi kepentingan konsistensi, anggaplah kita menginginkannya defimenyelesaikan perilaku + pada contoh pizza kami. Katakanlah setiap kali kita menambahkan dua atau lebih pizza bersama-sama, semua toppingnya akan digabungkan secara otomatis. Berikut tampilannya:

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

def __add__(diri sendiri, lainnya):
jika bukan isinstance(lainnya, Pizza):
raise TypeError("Anda hanya dapat menambahkan Pizza lain!")
new_topping = self.topping + other.topping
kembalikan Pizza (ukuran sendiri, topping_baru)

# Ayo buat dua pizza
pizza1 = Pizza('besar', ['pepperoni', 'jamur'])
pizza2 = Pizza('besar', ['zaitun', 'nanas'])

# Dan sekarang mari kita "tambahkan" mereka
gabungan_pizza = pizza1 + pizza2

print(combined_pizza.toppings) # Ini akan mencetak: ['pepperoni', 'jamur', 'zaitun', 'nanas']

Demikian pula untuk dunder __add__, kita juga bisa defimenyelesaikan fungsi aritmatika lainnya seperti __sub__ (dengan pengurangan menggunakan operator -) Dan __mul__ (untuk perkalian menggunakan operator *).

__len__

Metode dunder ini memungkinkan kita untuk defimenyelesaikan apa fungsinya len() harus kembali untuk barang-barang kami yang disesuaikan.

penggunaan Python len() untuk mendapatkan panjang atau ukuran struktur data seperti daftar atau string.

Dalam konteks contoh kita, kita dapat mengatakan bahwa "panjang" pizza adalah jumlah topping yang dimilikinya. Inilah cara kami dapat mengimplementasikannya:

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

def __len__(diri sendiri):
kembalikan len(self.toppings)

# Ayo buat pizza
my_pizza = Pizza('besar', ['pepperoni', 'jamur', 'zaitun'])

print(len(my_pizza)) # Ini akan mencetak: 3

Dalam metode __len__, kami hanya mengembalikan panjang daftar toppings. Sekarang, len(my_pizza) itu akan memberi tahu kita berapa banyak topping yang ada di dalamnya my_pizza.

__prosedur__

Metode dunder ini memungkinkan objek menjadi iterable, yaitu dapat digunakan dalam for loop.

Untuk melakukan ini, kita juga harus defimenyelesaikan fungsi __next__, Ini digunakan untuk defiselesaikan perilaku yang harus mengembalikan nilai berikutnya dalam iterasi. Itu juga harus menandakan iterable jika tidak ada lagi elemen dalam urutan. Kami biasanya mencapai ini dengan melemparkan pengecualian StopIteration.

Untuk contoh pizza kita, katakanlah kita ingin mengulangi toppingnya. Kita bisa membuat kelas Pizza kita bisa diulang definendo sebuah metode __iter__:

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

def __iter__(diri sendiri):
diri.n = 0
kembalikan diri

def __next__(diri sendiri):
jika self.n < len(self.topping):
result = self.topping[self.n]
diri.n += 1
hasil kembali
lain:
menaikkan StopIteration

# Ayo buat pizza
my_pizza = Pizza('besar', ['pepperoni', 'jamur', 'zaitun'])

# Dan sekarang mari kita mengulanginya
untuk topping di my_pizza:
cetak (topping)

Dalam hal ini, for loop memanggil __iter__, yang menginisialisasi penghitung (self.n) dan mengembalikan objek pizza itu sendiri (self).

Kemudian, untuk panggilan loop __next__ untuk mendapatkan setiap topping pada gilirannya.

Ketika __next__ mengembalikan semua bumbu, StopIteration itu melempar pengecualian dan for loop sekarang tahu bahwa tidak ada lagi topping dan akan membatalkan proses iterasi.

Ercole Palmeri

Buletin inovasi
Jangan lewatkan berita terpenting tentang inovasi. Daftar untuk menerimanya melalui email.
Tags: ular sanca

Artikel Terbaru

Intervensi inovatif dalam Augmented Reality, dengan penampil Apple di Poliklinik Catania

Operasi oftalmoplasti menggunakan penampil komersial Apple Vision Pro dilakukan di Poliklinik Catania…

3 Mei 2024

Manfaat Halaman Mewarnai untuk Anak - dunia keajaiban untuk segala usia

Mengembangkan keterampilan motorik halus melalui mewarnai mempersiapkan anak untuk keterampilan yang lebih kompleks seperti menulis. Mewarnai…

2 Mei 2024

Masa Depan Ada di Sini: Bagaimana Industri Perkapalan Merevolusi Perekonomian Global

Sektor angkatan laut adalah kekuatan ekonomi global sejati, yang telah menuju pasar 150 miliar...

1 Mei 2024

Penerbit dan OpenAI menandatangani perjanjian untuk mengatur aliran informasi yang diproses oleh Kecerdasan Buatan

Senin lalu, Financial Times mengumumkan kesepakatan dengan OpenAI. FT melisensikan jurnalisme kelas dunianya…

April 30 2024