Metode Ajaib di Python
Artikel ini menjelaskan metode ajaib di Python.
YouTube Video
Metode Ajaib di Python
Metode ajaib (metode khusus) di Python adalah metode yang diberi nama khusus yang digunakan untuk memberikan perilaku unik pada kelas. Contohnya, metode ini ditandai dengan adanya dua garis bawah (dunder) di awal dan akhir nama, seperti __init__
dan __str__
. Oleh karena itu, mereka juga disebut metode dunder.
Dengan mendefinisikan metode ajaib, Anda dapat menyesuaikan perilaku standar kelas. Misalnya, mendefinisikan __add__
memungkinkan Anda mengubah perilaku operator +
.
Metode Ajaib untuk Inisialisasi dan Representasi String
__init__
: Metode Inisialisasi
Metode __init__
adalah konstruktor yang dipanggil secara otomatis saat sebuah instans dibuat.
1class Person:
2 def __init__(self, name, age):
3 self.name = name
4 self.age = age
5
6person = Person("Alice", 30)
7print(person.name) # Alice
__str__
: Representasi String yang Mudah Dibaca Manusia
Metode __str__
mengembalikan representasi string yang mudah dibaca manusia. Metode ini dipanggil oleh print()
dan str()
.
1class Person:
2 def __init__(self, name):
3 self.name = name
4
5 def __str__(self):
6 return f"Person: {self.name}"
7
8person = Person("Bob")
9print(person) # Person: Bob
__repr__
: Representasi String untuk Debugging
Metode __repr__
mengembalikan representasi string untuk keperluan debugging. Digunakan oleh fungsi repr()
dan saat tampilan di interpreter.
1class Person:
2 def __init__(self, name):
3 self.name = name
4
5 def __repr__(self):
6 return f"Person(name={self.name!r})"
7
8person = Person("Eve")
9print(repr(person)) # Person(name='Eve')
Overload Operator Aritmatika
__add__
: Operator +
Dengan menggunakan metode ajaib, operator aritmatika dapat dioverload. Sebagai contoh, metode __add__
memungkinkan overload operator +
.
1class Vector:
2 def __init__(self, x, y):
3 self.x = x
4 self.y = y
5
6 def __add__(self, other):
7 return Vector(self.x + other.x, self.y + other.y)
8
9 def __repr__(self):
10 return f"Vector({self.x}, {self.y})"
11
12 # Other arithmetic magic methods:
13 # def __sub__(self, other): # Subtraction (-)
14 # def __mul__(self, other): # Multiplication (*)
15 # def __truediv__(self, other): # True division (/)
16 # def __floordiv__(self, other): # Floor division (//)
17 # def __mod__(self, other): # Modulo (%)
18 # def __pow__(self, other): # Exponentiation (**)
19
20v1 = Vector(1, 2)
21v2 = Vector(3, 4)
22print(v1 + v2) # Vector(4, 6)
Metode ajaib aritmatika lainnya meliputi sebagai berikut:.
Metode | Operator |
---|---|
__add__ |
+ |
__sub__ |
- |
__mul__ |
* |
__truediv__ |
/ |
__floordiv__ |
// |
__mod__ |
% |
__pow__ |
** |
Kustomisasi Operator Perbandingan
Anda juga dapat melakukan overload operator perbandingan. Sebagai contoh, metode __eq__
melakukan overload pada operator kesetaraan.
1class Box:
2 def __init__(self, volume):
3 self.volume = volume
4
5 def __eq__(self, other):
6 return self.volume == other.volume
7
8 def __lt__(self, other):
9 return self.volume < other.volume
10
11 # Comparison magic methods:
12 # def __eq__(self, other): # Equal to (==)
13 # def __ne__(self, other): # Not equal to (!=)
14 # def __lt__(self, other): # Less than (<)
15 # def __le__(self, other): # Less than or equal to (<=)
16 # def __gt__(self, other): # Greater than (>)
17 # def __ge__(self, other): # Greater than or equal to (>=)
18
19b1 = Box(100)
20b2 = Box(200)
21
22print(b1 == b2) # False
23print(b1 < b2) # True
Terdapat juga metode ajaib berikut:. Metode-metode ajaib ini mendefinisikan perbandingan seperti kesetaraan dan urutan di antara objek.
Operator | Metode Ajaib |
---|---|
== |
__eq__ |
!= |
__ne__ |
< |
__lt__ |
<= |
__le__ |
> |
__gt__ |
>= |
__ge__ |
Metode Ajaib untuk Tipe Kontainer
Anda dapat membuat kelas yang berperilaku seperti list atau dictionary.
__len__
: Mendapatkan Jumlah Elemen
Metode __len__
adalah metode ajaib yang mengembalikan jumlah elemen.
1class Basket:
2 def __init__(self, items):
3 self.items = items
4
5 def __len__(self):
6 return len(self.items)
7
8basket = Basket(["apple", "banana"])
9print(len(basket)) # 2
__getitem__
: Akses Indeks
Metode __getitem__
dipanggil ketika menggunakan akses indeks.
1class Basket:
2 def __init__(self, items):
3 self.items = items
4
5 def __getitem__(self, index):
6 return self.items[index]
7
8basket = Basket(["apple", "banana"])
9print(basket[1]) # banana
__setitem__
dan __delitem__
: Menulis dan Menghapus
Metode __setitem__
dan __delitem__
dipanggil ketika menulis atau menghapus item.
1class Basket:
2 def __init__(self, items):
3 self.items = items
4
5 def __setitem__(self, index, value):
6 self.items[index] = value
7
8 def __delitem__(self, index):
9 del self.items[index]
10
11basket = Basket(["apple", "banana"])
12basket[1] = "grape"
13del basket[0]
14print(basket.items) # ['grape']
Metode Ajaib untuk Iterasi
Agar objek dapat diiterasi dalam loop for
, implementasikan hal berikut:.
__iter__
dan __next__
1class Counter:
2 def __init__(self, limit):
3 self.limit = limit
4 self.current = 0
5
6 def __iter__(self):
7 return self
8
9 def __next__(self):
10 if self.current >= self.limit:
11 raise StopIteration
12 self.current += 1
13 return self.current
14
15for num in Counter(3):
16 print(num)
17# Output:
18# 1
19# 2
20# 3
Manajer Konteks (Pernyataan with
)
Dengan mendefinisikan metode __enter__
dan __exit__
, Anda dapat mengimplementasikan pra dan pasca proses untuk pernyataan with
.
1class FileOpener:
2 def __init__(self, filename):
3 self.filename = filename
4
5 def __enter__(self):
6 self.file = open(self.filename, 'r')
7 return self.file
8
9 def __exit__(self, exc_type, exc_val, exc_tb):
10 self.file.close()
11
12with FileOpener("example.txt") as f:
13 content = f.read()
14 print(content)
Objek yang Dapat Dipanggil: __call__
Dengan mendefinisikan metode __call__
, Anda dapat membuat sebuah instans dapat dipanggil seperti fungsi.
1class Greeter:
2 def __init__(self, greeting):
3 self.greeting = greeting
4
5 def __call__(self, name):
6 return f"{self.greeting}, {name}!"
7
8hello = Greeter("Hello")
9print(hello("Alice")) # Hello, Alice!
Ringkasan
Metode ajaib di Python adalah cara yang ampuh untuk menambahkan perilaku yang alami dan intuitif pada kelas. Setiap metode memiliki tujuan yang jelas, dan dengan mengimplementasikannya dengan benar Anda dapat menulis kode yang lebih fleksibel dan pythonic.
Metode ajaib berfungsi sebagai 'antarmuka tak terlihat' yang mendukung cara objek Python berinteraksi dan berperilaku di balik layar.
Anda dapat mengikuti artikel di atas menggunakan Visual Studio Code di saluran YouTube kami. Silakan periksa juga saluran YouTube kami.