Metode Ajaib di Python

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.

YouTube Video