Panduan Awal Mengenai Generik Python
Hai sana, master Python masa depan! Hari ini, kita akan memulai perjalanan menarik ke dunia Python Generics. Jangan khawatir jika Anda baru belajar programming - saya akan menjadi panduan ramah Anda, menjelaskan segala sesuatu secara langkah demi langkah. Jadi, ambil secangkir minuman kesukaan Anda, dan mari kita masuk ke dalamnya!
Apa Itu Generics?
Sebelum kita mulai mengoding, mari kita pahami apa itu generics. Bayangkan Anda punya kotak ajaib yang dapat menampung jenis item apa saja - mainan, buku, atau bahkan kue. Itu sebenarnya apa yang generics lakukan dalam programming. Mereka memungkinkan kita menulis kode yang fleksibel dan dapat bekerja dengan jenis data yang berbeda.
Mendefinisikan Fungsi Generik
Mari kita mulai dengan membuat fungsi generik. Dalam Python, kita menggunakan TypeVar
dari modul typing
untuk mendefinisikan jenis generik.
from typing import TypeVar
T = TypeVar('T')
def print_item(item: T) -> None:
print(f"Item adalah: {item}")
Dalam contoh ini, T
adalah jenis generik kita. Fungsi print_item
sekarang dapat menerima jenis data apa saja. Mari kitauraikan:
- Kita mengimpor
TypeVar
dari modultyping
. - Kita membuat variabel jenis
T
. - Fungsi kita
print_item
menerima argumenitem
jenisT
. - Fungsi tersebut hanya mencetak item.
Memanggil Fungsi Generik dengan Jenis Data Berbeda
Sekarang, mari kita lihat fungsi generik kita dalam aksi!
print_item(42)
print_item("Hello, Generics!")
print_item([1, 2, 3])
Output:
Item adalah: 42
Item adalah: Hello, Generics!
Item adalah: [1, 2, 3]
Seperti yang Anda lihat, fungsi kita bekerja dengan jenis data yang berbeda - bilangan bulat, string, bahkan daftar. Itu seperti memiliki pisau瑞士军刀 dalam kotak kode Anda!
Mendefinisikan Kelas Generik
Sekarang kita telah menguasai fungsi generik, mari kita tingkatkan dan buat kelas generik. Bayangkan kita sedang membangun sistem penyimpanan sederhana yang dapat menampung jenis item apa saja.
from typing import Generic, TypeVar
T = TypeVar('T')
class Box(Generic[T]):
def __init__(self, item: T):
self.item = item
def get_item(self) -> T:
return self.item
def set_item(self, new_item: T) -> None:
self.item = new_item
Mari kitauraikan kotak ajaib ini:
- Kita mendefinisikan kelas
Box
sebagaiGeneric[T]
. - Metode
__init__
menerimaitem
jenisT
. -
get_item
mengembalikan item yang disimpan. -
set_item
memungkinkan kita mengubah item.
Sekarang, mari kita gunakan kotak kita:
# Kotak bilangan bulat
int_box = Box(42)
print(int_box.get_item()) # Output: 42
# Kotak string
str_box = Box("Hello, Generic Class!")
print(str_box.get_item()) # Output: Hello, Generic Class!
# Mengubah item dalam kotak
int_box.set_item(100)
print(int_box.get_item()) # Output: 100
Apakah itu menarik? Kita dapat membuat kotak untuk menyimpan jenis item yang berbeda, dan Python memastikan keamanan jenis untuk kita.
Kekuatan Generics
Generics mungkin terlihat sedikit abstrak pada awalnya, tetapi mereka sangat kuat. Mereka memungkinkan kita menulis kode yang fleksibel dan keamanan jenis. Bayangkan Anda sedang membangun aplikasi besar - generics dapat membantu Anda membuat komponen yang dapat digunakan kembali dan bekerja dengan jenis data yang berbeda, menyimpan waktu dan mengurangi kesalahan.
Ini adalah contoh yang lebih kompleks untuk mengilustrasikan kekuatan ini:
from typing import Generic, TypeVar, List
T = TypeVar('T')
class Storage(Generic[T]):
def __init__(self):
self.items: List[T] = []
def add_item(self, item: T) -> None:
self.items.append(item)
def get_items(self) -> List[T]:
return self.items
def get_last_item(self) -> T:
if self.items:
return self.items[-1]
raise IndexError("Penyimpanan kosong")
# Menggunakan kelas generik Storage kita
int_storage = Storage[int]()
int_storage.add_item(1)
int_storage.add_item(2)
int_storage.add_item(3)
str_storage = Storage[str]()
str_storage.add_item("Apple")
str_storage.add_item("Banana")
str_storage.add_item("Cherry")
print(int_storage.get_items()) # Output: [1, 2, 3]
print(str_storage.get_last_item()) # Output: Cherry
Dalam contoh ini, kita telah membuat kelas generik Storage
yang dapat menampung daftar jenis apa saja. Kita kemudian membuat penyimpanan terpisah untuk bilangan bulat dan string, menunjukkan fleksibilitas kelas generik kita.
Kesimpulan
Selamat! Anda telah mengambil langkah pertama ke dunia Python Generics. Kita telah melihat fungsi generik, kelas generik, dan bahkan membuat sistem penyimpanan fleksibel. Ingat, seperti segala jenis alat kuat, generics memerlukan latihan untuk dikuasai. Jangan frustasi jika itu belum beresonasi segera - terus mencoba dan Anda akan segera melihat keajaiban generics dalam kode Anda sendiri.
Sementara itu, ini adalah tabel yang menggabungkan metode utama yang kita belajar:
Metode | Deskripsi |
---|---|
TypeVar('T') |
Membuat variabel jenis untuk penggunaan generik |
Generic[T] |
Mendefinisikan kelas generik |
__init__(self, item: T) |
Menginisialisasi kelas generik dengan item jenis T |
get_item(self) -> T |
Mengembalikan item jenis T |
set_item(self, new_item: T) -> None |
Mengatur item baru jenis T |
add_item(self, item: T) -> None |
Menambahkan item jenis T ke koleksi |
get_items(self) -> List[T] |
Mengembalikan daftar item jenis T |
get_last_item(self) -> T |
Mengembalikan item terakhir jenis T dalam koleksi |
Terus mengoding, terus belajar, dan ingat - dengan generics, kekuatan Python Anda tak terbatas! Selamat coding, para ahli Python masa depan!
Credits: Image by storyset