Apa Metode Ajaib di Python dan Cara Menggunakannya

Salah satu fitur Python yang kurang dikenal namun berharga adalah kemampuan untuk mengimplementasikan metode sihir pada objek. Dengan menggunakan metode ajaib, kita dapat menulis kode pembersih yang intuitif dan mudah dipahami.

Dengan metode ajaib, kita dapat membuat antarmuka untuk berinteraksi dengan objek dengan cara yang terasa lebih Pythonic. Artikel ini akan memperkenalkan Anda pada metode sulap, membahas praktik terbaik untuk membuatnya, dan menjelajahi metode sulap umum yang akan Anda temui.

Apakah Metode Sihir Itu?

Metode ajaib adalah metode Python yang menentukan bagaimana objek Python berperilaku ketika operasi umum dilakukan padanya. Metode-metode ini secara jelas didefinisikan dengan garis bawah ganda sebelum dan sesudah nama metode.

Akibatnya, mereka biasa disebut metode dunder, seperti pada garis bawah ganda. Metode dunder umum yang mungkin sudah Anda temui adalah metode __init__() yang digunakan untuk mendefinisikan konstruktor kelas.

Biasanya, metode dunder tidak dimaksudkan untuk dipanggil langsung dalam kode Anda; sebaliknya, mereka akan dipanggil oleh juru bahasa saat program sedang berjalan.

Mengapa Metode Ajaib Berguna?

Metode ajaib adalah konsep yang berguna dalam Pemrograman Berorientasi Objek dengan Python. Dengan menggunakannya, Anda menentukan perilaku tipe data kustom Anda saat digunakan dengan operasi bawaan yang umum. Operasi ini meliputi:

🟢 Operasi aritmatika

🟢 Operasi perbandingan

🟢 Operasi siklus hidup

🟢 Operasi representasi

Bagian berikut akan membahas cara mengimplementasikan metode ajaib yang menentukan perilaku aplikasi saat digunakan di semua kategori di atas.

Cara Mendefinisikan Metode Sihir

Seperti disebutkan sebelumnya, metode sihir menentukan perilaku objek. Dengan demikian, mereka didefinisikan sebagai bagian dari kelas objek. Karena mereka adalah bagian dari kelas objek, mereka menganggap diri sebagai argumen pertama yang merujuk ke objek itu sendiri.

  Apa itu Peta Konsep dan Bagaimana Cara Membuatnya?

Mereka dapat mengambil argumen tambahan tergantung pada bagaimana mereka akan dipanggil oleh juru bahasa. Mereka juga didefinisikan dengan jelas dengan dua garis bawah sebelum dan sesudah nama mereka.

Penerapan

Banyak dari apa yang telah kita diskusikan sejauh ini tampaknya teoretis dan abstrak. Pada bagian ini, kita akan mengimplementasikan kelas Rectangle sederhana.

Kelas ini akan memiliki properti panjang dan lebar. Dengan menggunakan metode __init__, Anda dapat menentukan properti ini pada pembuatan instance. Selain itu, Anda akan dapat membandingkan persegi panjang yang berbeda untuk melihat apakah sama, lebih kecil, atau lebih besar dari yang lain menggunakan operator ==, < dan >. Terakhir, persegi panjang harus mampu memberikan representasi string yang bermakna.

Menyiapkan Lingkungan Pengodean

Untuk mengikuti langkah-langkah ini, Anda memerlukan lingkungan runtime Python. Anda dapat menggunakan yang lokal, atau Anda dapat menggunakan kompiler Python techking.id online.

Membuat Kelas Persegi Panjang

Pertama, mari kita mulai dengan mendefinisikan kelas Rectangle.

class Rectangle:
    pass

Membuat Metode Konstruktor

Selanjutnya, mari buat metode ajaib pertama kita, metode konstruktor kelas. Metode ini akan mengambil tinggi dan lebar dan menyimpannya sebagai atribut pada instance kelas.

class Rectangle:
    def __init__(self, height, width):
        self.height = height
        self.width = width

Membuat Metode Ajaib untuk Representasi String

Selanjutnya, kami ingin membuat metode yang memungkinkan kelas kami menghasilkan string yang dapat dibaca manusia untuk mewakili objek. Metode ini akan dipanggil setiap kali kita memanggil fungsi str() yang meneruskan instance kelas Rectangle sebagai argumen. Metode ini juga akan dipanggil saat Anda memanggil fungsi yang mengharapkan argumen string, seperti fungsi cetak.

class Rectangle:
    def __init__(self, height, width):
        self.height = height
        self.width = width

    def __str__(self):
        return f'Rectangle({self.height}, {self.width})'

Metode __str__() harus mengembalikan string yang ingin Anda wakili sebagai objek. Dalam hal ini, kami mengembalikan string dengan format Rectangle(, ) di mana tinggi dan lebar adalah dimensi persegi panjang yang disimpan.

Membuat Metode Ajaib untuk Operasi Perbandingan

Selanjutnya, kami ingin membuat operator pembanding untuk operasi yang sama dengan, kurang dari, dan lebih besar dari. Ini disebut kelebihan beban operator. Untuk membuatnya, kami menggunakan metode ajaib masing-masing __eq__, __lt__ dan __gt__. Metode ini akan mengembalikan nilai boolean setelah membandingkan luas persegi panjang.

class Rectangle:
    def __init__(self, height, width):
        self.height = height
        self.width = width

    def __str__(self):
        return f'Rectangle({self.height}, {self.width})'

    def __eq__(self, other):
        """ Checking for equality """
        return self.height * self.width == other.height * other.width

    def __lt__(self, other):
        """ Checking if the rectangle is less than the other one """
        return self.height * self.width < other.height * other.width

    def __gt__(self, other):
        """ Checking if the rectage is greater than the other one """
        return self.height * self.width > other.height * other.width

Seperti yang Anda lihat, metode ini menggunakan dua parameter. Yang pertama adalah persegi panjang saat ini, dan yang kedua adalah nilai lain yang dibandingkan. Nilai ini bisa berupa instance Rectangle lain atau nilai lainnya. Logika bagaimana perbandingan dan kondisi di mana perbandingan akan kembali benar sepenuhnya terserah Anda.

  Apakah Anda Membutuhkan Kartu Suara Khusus untuk PC Anda?

Metode Sihir Umum

Di bagian selanjutnya, kita akan membahas metode sulap umum yang akan Anda temui dan gunakan.

#1. Operasi Aritmatika

Metode sulap aritmatika dipanggil saat instance kelas Anda ditempatkan di sisi kiri tanda aritmatika. Metode ini akan dipanggil dengan dua argumen, yang pertama adalah referensi ke instance. Nilai kedua adalah objek di sebelah kanan tanda. Adapun cara dan tandanya adalah sebagai berikut:

NameMethodSignDescriptionAddition__add__+Mengimplementasikan penambahan. Pengurangan__sub__–Mengimplementasikan pengurangan.Perkalian__mul__*Mengimplementasikan perkalianPembagian__div__/Mengimplementasikan pembagian.Floor division__floordiv__//Mengimplementasikan pembagian lantai.

#2. Operasi Perbandingan

Seperti metode sulap aritmatika, metode ini dipanggil ketika turunan dari kelas yang didefinisikan ditempatkan di sebelah kiri operator pembanding. Juga, seperti metode sihir aritmatika, mereka dipanggil dengan dua parameter; yang pertama adalah referensi ke instance objek. Yang kedua adalah referensi ke nilai di sisi kanan tanda.

NameMethodSignDescriptionKurang dari__lt__Mengimplementasikan perbandingan yang lebih besar Sama dengan__eq__==Mengimplementasikan perbandingan yang sama denganKurang dari atau sama dengan__le__>=Mengimplementasikan perbandingan yang lebih kecil atau sama dengan__Eq__==Mengimplementasikan yang sama dengan perbandinganKurang dari atau sama dengan__le__>=Mengimplementasikan yang lebih kecil dari atau sama dengan perbandinganLebih besar dari atau sama dengan__ge__<=Mengimplementasikan yang lebih besar dari atau sama dengan perbandingan

  Cara Mematikan Layar Sentuh di Chromebook

#3. Operasi Siklus Hidup

Metode ini akan dipanggil sebagai respons terhadap metode siklus hidup yang berbeda dari suatu objek, seperti dibuat atau dihapus. Konstruktor, __init__ termasuk dalam kategori ini. Metode umum dalam kategori ini tercantum dalam tabel di bawah ini:

NameMethodDescriptionConstructor__init__Metode ini dipanggil setiap kali objek dari kelas yang didefinisikan untuknya dihapus. Ini dapat digunakan untuk melakukan tindakan pembersihan seperti menutup file apa pun yang telah dibuka.Deletion__del__Metode ini dipanggil setiap kali objek dari kelas yang ditentukan untuknya dihapus. Ini dapat digunakan untuk melakukan tindakan pembersihan seperti menutup semua file yang telah dibuka.New__new__Metode __new__ dipanggil pertama kali saat objek dari kelas yang ditentukan dipakai. Metode ini dipanggil sebelum konstruktor dan mengambil kelas serta argumen tambahan apa pun. Ini mengembalikan sebuah instance dari kelas. Sebagian besar, ini tidak terlalu berguna, tetapi dibahas secara rinci di sini.

#4. Operasi Representasi

NameMethodDescriptionStr__str__Mengembalikan representasi string objek yang dapat dibaca manusia. Metode ini dipanggil saat Anda memanggil fungsi str(), meneruskan instance kelas sebagai argumen. Ini juga dipanggil saat Anda meneruskan instance ke fungsi print() dan format() . Ini dimaksudkan untuk memberikan string yang dapat dimengerti oleh pengguna akhir aplikasi. Repr__repr__Mengembalikan representasi string dari objek yang digunakan oleh pengembang. Idealnya, string yang dikembalikan harus kaya informasi sehingga Anda dapat membuat instance objek yang identik hanya dari string.

Praktik Terbaik untuk Membuat Metode Sihir

Metode ajaib luar biasa dan akan menyederhanakan kode Anda. Namun, penting untuk mengingat hal-hal berikut saat Anda menggunakannya.

  • Gunakan dengan hemat – Menerapkan terlalu banyak metode ajaib di kelas Anda membuat kode Anda sulit dipahami. Batasi diri Anda hanya untuk menerapkan hal-hal yang penting.
  • Pastikan Anda memahami implikasi kinerja dari metode seperti __setatrr__ dan __getattr__ sebelum menggunakannya.
  • Dokumentasikan perilaku metode ajaib Anda sehingga pengembang lain dapat mengetahui dengan tepat apa yang mereka lakukan. Ini memudahkan mereka untuk menggunakannya dan men-debug bila perlu.

Kata Akhir

Pada artikel ini, saya memperkenalkan metode ajaib sebagai cara untuk membuat kelas yang dapat digunakan dengan operasi bawaan. Saya juga membahas bagaimana mereka didefinisikan dan melalui contoh kelas yang menerapkan metode ajaib. Selanjutnya, saya menyebutkan berbagai metode yang mungkin akan Anda gunakan dan perlukan sebelum membagikan beberapa praktik terbaik yang perlu diingat.

Selanjutnya, Anda mungkin ingin mempelajari cara mengimplementasikan kelas Counter dengan Python.