
Class dan Object di Python
Class dan object adalah pondasi utama dalam pemrograman berorientasi objek (OOP) di Python.
Constructor dan destructor adalah dua konsep penting dalam pemrograman berorientasi objek (OOP) di Python. Keduanya berperan dalam proses pembuatan dan penghancuran object. Memahami siklus hidup object sangat penting agar program lebih efisien, aman, dan mudah dirawat, terutama saat bekerja dengan resource seperti file, koneksi database, atau memori besar.
Artikel ini akan membahas secara mendalam tentang constructor dan destructor di Python, mulai dari konsep dasar, contoh kode, studi kasus, best practice, hingga tips lanjutan agar kamu benar-benar paham dan siap menggunakannya di proyek nyata.
Constructor adalah method khusus yang otomatis dipanggil saat object dibuat. Di Python, constructor ditulis dengan nama __init__
. Constructor digunakan untuk menginisialisasi data/atribut object, menyiapkan resource, atau menjalankan proses awal lain yang dibutuhkan object.
class Buku:
def __init__(self, judul, penulis):
self.judul = judul
self.penulis = penulis
print("Object Buku dibuat!")
b1 = Buku("Belajar Python", "Maslul")
print(b1.judul)
Object Buku dibuat!
Belajar Python
Penjelasan:
__init__
menerima parameter tambahan selain self
.b1 = Buku(...)
).Constructor bisa diberi nilai default dan validasi agar object selalu valid.
class Mahasiswa:
def __init__(self, nama, nim, jurusan="Informatika"):
if not nim.isdigit():
raise ValueError("NIM harus angka!")
self.nama = nama
self.nim = nim
self.jurusan = jurusan
try:
m = Mahasiswa("Budi", "12345")
print(m.nama, m.nim, m.jurusan)
m2 = Mahasiswa("Ani", "12A34")
except ValueError as e:
print(e)
Budi 12345 Informatika
NIM harus angka!
Jika tidak butuh data awal, constructor bisa tanpa parameter tambahan.
class Timer:
def __init__(self):
self.mulai = 0
self.selesai = 0
Destructor adalah method khusus yang otomatis dipanggil saat object dihapus dari memori. Di Python, destructor ditulis dengan nama __del__
. Destructor digunakan untuk membersihkan resource, menutup file, atau proses lain sebelum object benar-benar hilang dari memori.
class File:
def __init__(self, nama):
self.nama = nama
print(f"File {self.nama} dibuka.")
def __del__(self):
print(f"File {self.nama} ditutup.")
f = File("data.txt")
del f # Memaksa pemanggilan destructor
File data.txt dibuka.
File data.txt ditutup.
Penjelasan:
__del__
dipanggil saat object dihapus (misal dengan del
atau saat program selesai).Misal, kamu ingin memastikan file selalu ditutup saat object tidak dipakai.
class FileHandler:
def __init__(self, path):
self.file = open(path, "w")
print("File dibuka.")
def tulis(self, data):
self.file.write(data)
def __del__(self):
self.file.close()
print("File ditutup.")
fh = FileHandler("contoh.txt")
fh.tulis("Hello World!")
del fh
File dibuka.
File ditutup.
Penting:
Destructor di Python tidak selalu langsung dipanggil saat object tidak digunakan, karena Python menggunakan garbage collector. Untuk resource penting, lebih baik gunakan context manager (with
) agar resource pasti dibersihkan.
class Database:
def __init__(self, nama):
self.nama = nama
print(f"Koneksi ke database {self.nama} dibuka.")
def query(self, sql):
print(f"Eksekusi: {sql}")
def __del__(self):
print(f"Koneksi ke database {self.nama} ditutup.")
db = Database("mahasiswa.db")
db.query("SELECT * FROM mahasiswa")
del db
Koneksi ke database mahasiswa.db dibuka.
Eksekusi: SELECT * FROM mahasiswa
Koneksi ke database mahasiswa.db ditutup.
class Logger:
def __init__(self, nama_file):
self.file = open(nama_file, "a")
print("Logger aktif.")
def log(self, pesan):
self.file.write(pesan + "\n")
def __del__(self):
self.file.close()
print("Logger dimatikan.")
lg = Logger("aplikasi.log")
lg.log("Aplikasi dijalankan.")
del lg
Logger aktif.
Logger dimatikan.
Constructor dan destructor juga bisa digunakan pada class turunan (inheritance).
class Hewan:
def __init__(self, nama):
self.nama = nama
print(f"Hewan {self.nama} lahir.")
def __del__(self):
print(f"Hewan {self.nama} mati.")
class Kucing(Hewan):
def __init__(self, nama, warna):
super().__init__(nama)
self.warna = warna
print(f"Kucing {self.nama} berwarna {self.warna}.")
def __del__(self):
print(f"Kucing {self.nama} berwarna {self.warna} mati.")
super().__del__()
k = Kucing("Mimi", "Oren")
del k
Hewan Mimi lahir.
Kucing Mimi berwarna Oren.
Kucing Mimi berwarna Oren mati.
Hewan Mimi mati.
Penjelasan:
super().__init__()
untuk memanggil constructor parent.super().__del__()
.No | Tips | Penjelasan |
---|---|---|
1 | Selalu gunakan constructor untuk inisialisasi data object | Hindari mengisi atribut di luar constructor |
2 | Gunakan destructor hanya untuk resource penting | Misal: file, koneksi, memori besar |
3 | Jangan andalkan destructor untuk resource kritis | Gunakan context manager (with ) jika memungkinkan |
4 | Hindari operasi berat di destructor | Destructor bisa dipanggil di waktu yang tidak terduga |
5 | Dokumentasikan constructor dan destructor | Agar mudah dipahami tim lain |
Q: Apakah constructor wajib ada di setiap class?
A: Tidak wajib, tapi sangat disarankan untuk inisialisasi data.
Q: Apakah destructor selalu dipanggil saat object tidak dipakai?
A: Tidak selalu langsung, tergantung garbage collector Python.
Q: Bagaimana cara memastikan resource selalu dibersihkan?
A: Gunakan context manager (with
) atau panggil method khusus (misal: close()
).
Q: Bisakah constructor/destructor diwariskan?
A: Bisa, gunakan super()
untuk memanggil constructor/destructor parent.
Q: Apa beda constructor dan method biasa?
A: Constructor otomatis dipanggil saat object dibuat, method biasa harus dipanggil manual.
Untuk resource penting, lebih baik gunakan context manager agar resource pasti dibersihkan.
class FileManager:
def __init__(self, path):
self.path = path
def __enter__(self):
self.file = open(self.path, "w")
print("File dibuka (context manager).")
return self.file
def __exit__(self, exc_type, exc_val, exc_tb):
self.file.close()
print("File ditutup (context manager).")
with FileManager("contoh2.txt") as f:
f.write("Hello Context Manager!")
File dibuka (context manager).
File ditutup (context manager).
Constructor dan destructor adalah bagian penting dari siklus hidup object di Python. Constructor memastikan object selalu punya data awal yang valid, sedangkan destructor membantu membersihkan resource sebelum object dihapus. Namun, untuk resource penting, gunakan context manager agar lebih aman dan terjamin.
Teruslah berlatih membuat class dengan constructor dan destructor di berbagai kasus nyata, agar semakin mahir dan siap membangun aplikasi Python yang profesional!
Happy coding!
Class dan object adalah pondasi utama dalam pemrograman berorientasi objek (OOP) di Python.
Menulis kode Python bisa dilakukan di mana saja, bahkan di Notepad sekalipun.
Regular Expression (RegEx) adalah salah satu alat paling ampuh dalam pemrograman Python untuk memproses dan memanipulasi teks.
Bekerja dengan tanggal dan waktu (date & time) adalah salah satu kebutuhan paling umum dalam pemrograman Python, baik untuk mencatat waktu transaksi, membuat laporan, atau sekadar menampilkan waktu saat ini.