OOP 1: Class & Object

Membuat class, atribut, method, constructor, dan memahami self.

Part 20 dari 24 ± 45 menit Gratis

Mengapa OOP?

Object-Oriented Programming mengelompokkan data dan perilaku yang berkaitan dalam satu kesatuan. Bayangkan sebuah rekening bank: ia punya data (nomor, saldo) dan perilaku (setor, tarik). Dengan class, keduanya digabung.

class dan object

  • Class = cetak biru.
  • Object (instance) = benda nyata yang dibuat dari cetak biru itu.
class Mobil:
    def __init__(self, merek, warna):
        self.merek = merek
        self.warna = warna

    def info(self):
        return f"{self.warna} {self.merek}"

a = Mobil("Toyota", "merah")
b = Mobil("Honda", "biru")
print(a.info())      # merah Toyota
print(b.warna)       # biru

Memahami __init__ dan self

  • __init__ adalah constructor: dijalankan otomatis saat objek dibuat.
  • self adalah objek itu sendiri. Setiap method wajib menerima self sebagai parameter pertama; Python mengisinya otomatis saat kamu memanggil a.info().
  • self.merek = merek menyimpan data sebagai atribut milik objek tersebut.

Atribut class vs atribut objek

class Siswa:
    sekolah = "KelasIT"          # atribut class: dibagi semua objek

    def __init__(self, nama):
        self.nama = nama         # atribut objek: milik masing-masing

Method yang mengubah state

class Rekening:
    def __init__(self, pemilik, saldo=0):
        self.pemilik = pemilik
        self.saldo = saldo

    def setor(self, jumlah):
        self.saldo += jumlah

    def tarik(self, jumlah):
        if jumlah > self.saldo:
            return False
        self.saldo -= jumlah
        return True

Perhatikan bahwa method menyimpan hasil di self.saldo, sehingga state objek tetap terjaga antar pemanggilan.

Method khusus (dunder)

Nama berawalan dan berakhiran dua underscore punya makna khusus:

class Titik:
    def __init__(self, x, y):
        self.x, self.y = x, y

    def __str__(self):
        return f"({self.x}, {self.y})"

    def __eq__(self, lain):
        return self.x == lain.x and self.y == lain.y

print(Titik(1, 2))                   # (1, 2)
print(Titik(1, 2) == Titik(1, 2))    # True

Enkapsulasi dengan konvensi

Python tidak memiliki private sejati. Konvensinya:

  • _nama : "internal, jangan diubah dari luar".
  • __nama : name mangling (lebih sulit diakses).

@property

Mengakses method seperti atribut dan menambah validasi:

class Lingkaran:
    def __init__(self, r):
        self._r = r

    @property
    def luas(self):
        return 3.14159 * self._r ** 2

Lingkaran(2).luas dipakai tanpa tanda kurung.

Kapan memakai class?

Saat ada data + perilaku yang saling terkait dan punya banyak instance. Untuk transformasi sederhana, function biasa lebih ringkas.

Praktikkan langsung, gratis

Tulis dan jalankan kode langsung di browser, dapatkan penilaian otomatis. Daftar gratis kapan saja untuk menyimpan progres dan meraih sertifikat.

Coba latihan sekarang, tanpa daftar
Bagikan: WhatsApp Facebook LinkedIn X