Lewati ke konten utama

Metode Dunder Python: Perintah Khusus yang Perlu Diketahui

Pelajari bagaimana metode double underscore Python memungkinkan objek kustom Anda bekerja secara natural dengan operasi bawaan, dari pencetakan hingga aritmetika. Temukan bagaimana metode “sihir” ini menyederhanakan desain kelas dan membuka perilaku yang kuat.
Diperbarui 28 Sep 2026  · 8 mnt Baca

Jelajahi bersama AI

ChatGPTClaudePerplexity

Pernah bertanya-tanya bagaimana Python membuat kelas kustom Anda bekerja mulus dengan fungsi bawaan? Itu berkat metode "dunder" yang canggih—singkatan dari double underscore methods.

Bayangkan Anda membuat kelas untuk bilangan kompleks dan ingin menggunakan operator + secara natural. Alih-alih menulis kode tambahan untuk menangani penjumlahan, Anda mendefinisikan metode __add__, dan Python mengurus sisanya.

Metode-metode sihir ini, seperti __init__ untuk pembuatan objek dan __str__ untuk representasi string, dipanggil secara otomatis oleh Python, sehingga Anda tidak perlu memanggilnya langsung. Metode ini mencegah konflik penamaan dengan metode biasa dan mendayai fitur seperti operator overloading dan perilaku kustom.

Baik saat membuat instance objek, melakukan operasi aritmetika, atau sekadar mencetak sebuah objek, metode dunder bekerja diam-diam di latar belakang untuk membuat kode Anda lebih elegan dan efisien. Jika Anda baru di Python dan ingin mengejar beberapa konsep utama, ikuti kursus Introduction to Python kami untuk fondasi yang baik.

Apa Itu Metode Dunder di Python?

Seperti yang mulai saya singgung, metode dunder Python adalah metode unik, atau "sihir", yang menjadi tulang punggung model data Python dengan memungkinkan kelas kustom Anda berintegrasi dengan operasi bawaan Python. Operator ini mencakup hal-hal seperti pencetakan, pembandingan, dan melakukan aritmetika.

Saat Anda mendefinisikan metode seperti __init__ untuk inisialisasi objek, __repr__ dan __str__ untuk representasi objek, atau bahkan __del__ untuk pembersihan, pada dasarnya Anda memberi tahu Python cara menangani operasi standar untuk objek Anda. Interpreter secara otomatis memanggil metode ini ketika operasi yang sesuai dilakukan. Otomatisasi bawaan ini menciptakan jembatan antara fitur asli Python dan kelas yang ditentukan pengguna.

Nanti, kita akan melihat contoh kelas yang menggunakan metode ini dan yang tidak, sehingga Anda dapat melihat bagaimana semua ini bekerja.

Kategori Metode Dunder

Mari jelajahi kategori utama metode dunder dan lihat bagaimana metode ini memberdayakan kode Anda.

1. Inisialisasi dan konstruksi

Metode dunder seperti __new__, __init__, dan __del__ mengontrol bagaimana objek dibuat, diinisialisasi, dan akhirnya dihancurkan.

  • __new__ vs. __init__: __new__ bertanggung jawab membuat instance baru, sedangkan __init__ menginisialisasinya. Pemisahan ini penting saat bekerja dengan tipe immutable, di mana Anda mungkin menimpa __new__ untuk tujuan tertentu.

  • __del__: Metode ini bertindak sebagai destruktor, memungkinkan pembersihan ketika sebuah objek akan dikumpulkan sebagai garbage.

Anda bahkan dapat menyesuaikan __new__ pada kelas immutable untuk menerapkan aturan pembuatan tertentu.

2. Metode numerik dan aritmetika

Metode dunder seperti __add__, __sub__, __mul__, dan varian in-place-nya memungkinkan objek Anda mendukung operasi aritmetika. Ini dikenal sebagai operator overloading. Dengan mendefinisikan metode ini, Anda dapat mengaktifkan perilaku aritmetika yang natural untuk objek kustom Anda.

Sebagai contoh, overload __add__ dalam kelas Vector untuk menjumlahkan elemen yang bersesuaian dari dua vektor. Ini sangat berguna saat merancang kelas yang memodelkan konsep matematika atau instrumen keuangan.

3. Metode perbandingan dan kesetaraan

Metode seperti __eq__, __lt__, dan __gt__ menentukan bagaimana objek dibandingkan. Metode ini memungkinkan Anda mendefinisikan apa artinya dua objek setara atau bagaimana mereka harus diurutkan.

Contoh umum adalah membandingkan luas dua bentuk: Anda dapat menimpa __lt__ untuk mengembalikan true jika luas satu bentuk lebih kecil dari bentuk lainnya. Ini dapat membantu dalam koleksi atau algoritma pengurutan.

4. Metode representasi string

Metode __str__ dan __repr__ mengontrol bagaimana objek Anda ditampilkan sebagai string.

  • __repr__ harus memberikan representasi yang ramah pengembang yang dapat digunakan untuk membuat ulang objek.

  • __str__ berfokus pada tampilan yang ramah pengguna.

5. Metode kontainer dan iterable

Agar objek Anda berperilaku seperti urutan atau kontainer, Anda dapat mengimplementasikan metode seperti __len__, __getitem__, dan __iter__. Ini memungkinkan operasi seperti pengindeksan, iterasi, dan pengujian keanggotaan.

Misalnya, jika Anda merancang stack atau list kustom, mengimplementasikan metode ini memungkinkan Anda menggunakan fungsi bawaan seperti len().

6. Callability dan pemrograman fungsional

Dengan metode __call__, instance kelas Anda dapat dipanggil seperti fungsi. Ini sangat berguna untuk membuat objek fungsi stateful yang dapat melakukan cache hasil atau mempertahankan status internal antar pemanggilan. Anggap saja ini sebagai mengubah objek Anda menjadi mesin komputasi mini yang dapat Anda panggil berulang kali dengan parameter berbeda.

7. Context manager

Mengimplementasikan metode __enter__ dan __exit__ memungkinkan objek Anda digunakan dengan pernyataan with untuk manajemen sumber daya. Ini penting untuk mengelola sumber daya seperti handle berkas atau koneksi jaringan, memastikan semuanya disiapkan dan dibersihkan dengan benar.

Skenario nyata adalah menggunakan context manager kustom untuk membuka dan menutup koneksi database dengan aman.

8. Akses atribut dan deskriptor

Metode seperti __getattr__, __setattr__, dan __delattr__ memungkinkan Anda mengontrol bagaimana atribut diakses dan dimodifikasi. Protokol deskriptor semakin menyempurnakan ini dengan memungkinkan objek mengelola akses atribut secara dinamis.

Sebagai contoh, sebuah deskriptor dapat memvalidasi atau mentransformasi nilai atribut, memastikan nilai tersebut memenuhi kriteria tertentu sebelum disetel.

Metode Dunder Lanjutan dan Lainnya  

Walaupun metode dunder inti mencakup sebagian besar kasus penggunaan, Python menyertakan metode lanjutan dan khusus untuk tugas seperti pemrograman asinkron, metaprogramming, dan perilaku spesifik pustaka. Misalnya:  

  • Metode asinkron: Metode seperti __aiter__ dan __anext__ memungkinkan iterasi asinkron, sementara __await__ mendukung objek yang dapat di-await.  

  • Hook metaprogramming: Metode seperti __prepare__ dan __set_name__ memungkinkan pembuatan kelas dinamis dan penamaan atribut.  

  • Metode khusus pustaka: Pustaka seperti NumPy atau Pandas sering mendefinisikan metode dunder kustom (misalnya, __array__ untuk integrasi NumPy).

Metode lanjutan ini biasanya digunakan untuk tugas khusus sehingga sebagian besar pengembang tidak membutuhkannya setiap hari. Namun, metode ini menunjukkan fleksibilitas dan kedalaman Python. Saya sarankan menjelajahi dokumentasi model data Python resmi untuk daftar lengkapnya. Sumber ini menyediakan detail komprehensif tentang semua metode dunder dan tujuan penggunaannya.

Semua Metode Dunder di Python

Python menyediakan lebih dari 100 metode dunder, masing-masing dirancang untuk mengontrol berbagai aspek perilaku objek. Sementara kita telah mengeksplorasi kategori utama dalam artikel ini, berikut ringkasan tingkat tinggi sebagai referensi cepat:

  • Metode aritmetika: Metode seperti __add__, __sub__, __mul__, dan __truediv__ memungkinkan objek Anda mendukung operator (+, -, *, /).

  • Metode perbandingan: Metode seperti __eq__, __lt__, dan __gt__ mendefinisikan bagaimana objek dibandingkan untuk kesetaraan atau urutan.

  • Manajemen atribut: Dengan metode seperti __getattr__, __setattr__, dan __delattr__, Anda dapat mengontrol akses atribut dan mengimplementasikan perilaku dinamis.

  • Inisialisasi dan konstruksi: __new__, __init__, dan __del__ masing-masing mengelola pembuatan objek, inisialisasi, dan pembersihan.

  • Representasi string: Metode seperti __str__ dan __repr__ menentukan bagaimana objek direpresentasikan sebagai string, membantu keluaran yang ramah pengguna.

  • Perilaku iterasi dan kontainer: Implementasikan __iter__ dan __next__ untuk membuat objek Anda dapat diiterasi serta metode lain untuk mendukung pengindeksan dan pengambilan panjang.

  • Callability: __call__ memungkinkan sebuah instance dipanggil seperti fungsi, mendukung gaya pemrograman fungsional dengan perilaku stateful.

  • Manajemen konteks: Dengan __enter__ dan __exit__, objek dapat digunakan dengan pernyataan with untuk mengelola sumber daya dengan benar.

  • Hook metaprogramming: Metode seperti __init_subclass__ menyediakan cara untuk menyesuaikan pembuatan kelas dan perilaku secara dinamis.

Rujuk dokumentasi Model Data Python resmi untuk daftar lengkap dan detail dari metode dunder ini dan fungsionalitasnya. Sumber komprehensif ini akan membantu Anda membuka sepenuhnya kekuatan model objek Python dan menyusun kode yang lebih elegan dan efisien.

Contoh Dunia Nyata & Use Case

Mari jelajahi bagaimana metode dunder dapat memberdayakan skenario nyata melalui beberapa contoh.

Operator overloading

Bayangkan Anda memiliki kelas numerik atau string kustom. Dengan mengimplementasikan metode dunder seperti __add__ atau __mul__, Anda memungkinkan objek Anda bekerja secara natural dengan operator aritmetika. Anda dapat menjumlah, mengurang, atau mengalikan instance sebagaimana Anda lakukan dengan tipe bawaan, membuat kelas kustom Anda berpadu mulus dengan operasi aritmetika Python.

class Vector:
   def __init__(self, x, y):
        self.x = x
        self.y = y
   def __add__(self, other):
        return Vector(self.x + other.x, self.y + other.y)
   def __str__(self):
        return f"Vector({self.x}, {self.y})"

# Usage
v1 = Vector(1, 2)
v2 = Vector(3, 4)

result = v1 + v2
print(result)  # Output: Vector(4, 6)

Caching dengan callability

Pernah ingin menghindari pengulangan komputasi yang mahal? Dengan mengimplementasikan metode __call__, Anda dapat membuat objek berperilaku seperti fungsi yang melakukan cache hasilnya. Ini memungkinkan Anda menyimpan hasil komputasi berat dan mengembalikannya dengan cepat pada pemanggilan berikutnya, mengoptimalkan kinerja dan menghemat waktu pemrosesan yang berharga.

class CachedComputation:
   def __init__(self):
        self.cache = {}
   def __call__(self, x):
        if x not in self.cache:
            self.cache[x] = self._expensive_computation(x)
        return self.cache[x]
   def _expensive_computation(self, x):
        # Imagine a complex calculation here
        return x ** 2

# Usage
compute = CachedComputation()

print(compute(5))  # Computes and caches: Output: 25
print(compute(5))  # Retrieves from cache: Output: 25

Context manager kustom

Membangun context manager menggunakan metode __enter__ dan __exit__ memungkinkan Anda mengotomatiskan manajemen sumber daya. Misalnya, Anda dapat merancang context manager kustom untuk menangani operasi berkas—membuka berkas saat memasuki blok dan memastikan menutupnya saat keluar. Ini menyederhanakan kode Anda dan mencegah kesalahan umum seperti kebocoran sumber daya.

class FileHandler:
   def __init__(self, filename, mode):
        self.filename = filename
        self.mode = mode
   def __enter__(self):
        self.file = open(self.filename, self.mode)
        return self.file
   def __exit__(self, exc_type, exc_val, exc_tb):
        self.file.close()

# Usage
with FileHandler("example.txt", "r") as file:
    content = file.read()
    print(content)

Iterable dan kontainer kustom

Agar kontainer kustom Anda bekerja dengan loop dan komprehensi Python, implementasikan protokol iterasi dengan mendefinisikan metode seperti __iter__ dan __next__. Baik Anda membangun stack, queue, atau kontainer lain yang kustom, metode ini memungkinkan objek Anda di-loop layaknya list biasa, meningkatkan fleksibilitas dan kegunaan kelas Anda.

class Stack:
   def __init__(self):
        self.items = []
   def push(self, item):
	self.items.append(item)
   def pop(self):
        return self.items.pop()
   def __iter__(self):
        self.index = 0
        return self
   def __next__(self):
        if self.index >= len(self.items):
            raise StopIteration
        item = self.items[self.index]
        self.index += 1
        return item

# Usage
stack = Stack()
stack.push(1)
stack.push(2)
stack.push(3)

for item in stack:
    print(item)  # Output: 1, 2, 3

Untuk selengkapnya tentang iterable kustom dan perilaku kontainer, lihat Python Lists Tutorial dan Python List Functions & Methods Tutorial and Examples.

Praktik Terbaik dengan Metode Dunder

Kapan dan bagaimana menimpa metode dunder adalah hal yang penting. Berikut beberapa pedoman yang perlu diingat:

Kapan menimpa

Hanya timpa metode dunder jika Anda perlu menyesuaikan perilaku. Misalnya, jika Anda ingin objek Anda mendukung aritmetika atau pemeriksaan kesetaraan dengan cara tertentu, maka layak mengimplementasikan metode seperti __add__ atau __eq__.

Konsistensi

Jika Anda menimpa satu metode, seperti __eq__ untuk pemeriksaan kesetaraan, perbarui metode terkait seperti __hash__ sesuai kebutuhan. Konsistensi ini memastikan objek Anda berperilaku benar dalam koleksi seperti set atau dictionary.

Hindari penggunaan berlebihan

Tahan godaan untuk membuat nama dunder baru di luar model data Python standar. Berpegang pada kumpulan metode dunder bawaan menjaga kode Anda tetap jelas dan mencegah perilaku yang tidak terduga.

Pertimbangan kinerja

Ingat bahwa terlalu sering menimpa metode dunder, terutama di bagian kode yang sering dijalankan, dapat memengaruhi kinerja. Upayakan implementasi yang efisien untuk menghindari perlambatan pada operasi berfrekuensi tinggi.

Kesimpulan dan Sumber Lanjutan

Metode dunder memberdayakan kelas Python Anda untuk berinteraksi mulus dengan fitur bawaan bahasa, membuat kode Anda lebih bersih dan intuitif. Metode ini memungkinkan objek Anda menangani segala hal mulai dari aritmetika dan perbandingan hingga manajemen atribut kustom tanpa upaya ekstra dari Anda. Anda sebaiknya bereksperimen dengan metode-metode ini dalam proyek Anda dan lihat bagaimana metode ini dapat menyederhanakan operasi yang kompleks.

Untuk informasi lebih mendalam, lihat dokumentasi model data Python resmi. Anda juga akan menemukan sumber daya DataCamp kami bermanfaat:


Oluseye Jeremiah's photo
Author
Oluseye Jeremiah
LinkedIn

Penulis teknis yang mengkhususkan diri pada AI, ML, dan ilmu data, membuat gagasan kompleks menjadi jelas dan mudah diakses.

Topik
Python

Belajar Python bersama DataCamp

Kursus

Python Tingkat Menengah

4 jam
1.4M
Tingkatkan keterampilan data science Anda dengan membuat visualisasi menggunakan Matplotlib dan memanipulasi DataFrame dengan pandas.
Lihat DetailRight Arrow
Mulai Kursus
Lihat SelengkapnyaRight Arrow
Terkait

blogs

Tutorial Korelasi di R

Dapatkan pengenalan dasar-dasar korelasi di R: pelajari lebih lanjut tentang koefisien korelasi, matriks korelasi, plotting korelasi, dan sebagainya.
David Woods's photo

David Woods

13 mnt

blogs

Spaghetti Plot dan Jalur Badai

Temukan alasan mengapa Anda sebaiknya (tidak) menggunakan spaghetti plot untuk menyampaikan ketidakpastian jalur prediksi badai serta dampaknya terhadap interpretasi.
Hugo Bowne-Anderson's photo

Hugo Bowne-Anderson

13 mnt

blogs

40 Pertanyaan Wawancara DBMS Teratas di 2026

Kuasai pertanyaan wawancara basis data, dari konsep SQL dasar hingga skenario desain sistem tingkat lanjut. Panduan mendalam ini mencakup semua yang Anda perlukan untuk sukses di wawancara DBMS dan meraih peran berikutnya.
Dario Radečić's photo

Dario Radečić

15 mnt

blogs

12 Alternatif ChatGPT Terbaik yang Bisa Anda Coba pada 2026

Artikel ini menyajikan daftar alternatif ChatGPT yang akan meningkatkan produktivitas Anda.
Javier Canales Luna's photo

Javier Canales Luna

14 mnt

Lihat SelengkapnyaLihat Selengkapnya