Belajar dengan membaca secara berurutan

Soal Rangkuman Python OOP — Konfirmasi Hasil Belajar lewat Kode

Empat latihan yang merangkum apa yang kamu pelajari di Python OOP — definisi class dengan special method, pewarisan, encapsulation, dan polimorfisme. Tulis kode, jalankan, dan review seluruh chapter sekaligus.

Soal 1: Desain class Point dengan special method

Bangun class Point yang merepresentasikan koordinat 2D. Kamu akan menginisialisasi atribut di __init__, mendefinisikan apa yang dilakukan + antara dua titik dengan __add__, dan membentuk apa yang ditampilkan print() dengan __str__ — tiga special method yang bekerja bersama.

Cara ketiga special method berjalan secara berurutan
Point(1, 2)__init__: self.x=1, self.y=2p1 + p2__add__: kembalikan Point(4, 6)print(p1 + p2)__str__: "(4, 6)"+print
__init__ menetapkan atribut → __add__ mengembalikan instance baru → __str__ memformat string — masing-masing dipanggil bergantian.

Tulis class Point yang menyimpan koordinat x dan y.

Desain class ini agar memanggil print(Point(1, 2) + Point(3, 4)) menampilkan (4, 6) ke layar.

Python Editor

Jalankan kode untuk melihat output

Soal 2: Perluas akun bank dengan pewarisan dan super()

Wariskan dari class induk BankAccount untuk membangun SavingsAccount yang dapat menerapkan bunga. Polanya adalah pewarisan klasik: panggil initializer induk dengan super().__init__(...), lalu tambahkan atribut khusus anak di atasnya.

Panggil super() untuk memakai ulang __init__ induk, lalu tambahkan milikmu sendiri
BankAccount (induk)name / balanceSavingsAccount (anak)name / balance / rate__init__self.name, self.balance__init__super().__init__(...)tambah self.rateapply_interest()balance += balance * ratemewarisipanggil supermemperluas
Memanggil super().__init__(...) dari __init__ anak memungkinkanmu memakai ulang setup induk dan hanya menambah apa yang baru di anak.

Tulis class SavingsAccount yang mewarisi dari BankAccount. Selain name dan balance milik induk, SavingsAccount membawa interest rate.

Tambahkan method apply_interest() yang menambahkan bunga (balance × rate, dipotong ke integer) ke balance saat ini. Bangun SavingsAccount("Alice", 100000, 0.05), panggil apply_interest(), dan desain class agar print() menampilkan Alice: 105000.

Python Editor

Jalankan kode untuk melihat output

Soal 3: Validasi suhu dengan @property

Tulis class Celsius yang menolak assignment di bawah nol absolut (-273.15). Kamu akan memakai @property dan @value.setter untuk menyisipkan validasi tepat ke dalam assignment atribut — itulah pola encapsulation klasik.

Setter memvalidasi setiap assignment
Celsius(25)self.value = 25 → settert.value = -300assign ulang → setter25 >= -273.15validasi lulus-300 < -273.15validasi gagalself._value = 25tersimpanraise ValueErrorexception
t.value = X terlihat seperti assignment biasa, tapi melewati setter, yang memvalidasi nilainya lebih dulu. Di luar rentang → ValueError, di dalam rentang → simpan di _value.

Tulis class Celsius dengan atribut value yang memunculkan ValueError("Suhu di bawah nol absolut tidak diperbolehkan") saat kamu mencoba menetapkan nilai apa pun yang kurang dari -273.15.

Bangun Celsius(25) dan tampilkan suhunya, lalu bungkus assignment t.value = -300 di try / except dan tampilkan pesan error dalam bentuk Error: ....

Python Editor

Jalankan kode untuk melihat output

Soal 4: Pakai polimorfisme untuk menghitung luas dalam satu loop

Beri dua class berbeda method dengan nama yang sama (area()), masukkan instance-nya ke dalam list, dan proses mereka dengan satu loop for. Pemanggil tidak peduli class mana yang mana — itulah polimorfisme dalam intinya.

Nama method sama, perilaku berbeda per tipe
Rectanglewidth × heightshapes list[Rectangle, Circle]Circleπ × radius²Rectangle.area()= w × hfor shape in shapes:shape.area()Circle.area()= π × r²forjika Rectanglejika Circle
Saat kamu memanggil shape.area() pada tiap item di list, method yang cocok dengan tipe aktual item otomatis dipilih.

Tulis dua class, Rectangle(width, height) dan Circle(radius), keduanya dengan method area() yang mengembalikan luas. Rectangle menghitung width × height dan Circle menghitung π × radius kuadrat.

Masukkan Rectangle(3, 4) dan Circle(5) ke dalam list, loop, dan tampilkan tiap luas sebagai Luas: 12.00 — diformat ke dua angka desimal. Pakai math.pi untuk π.

Python Editor

Jalankan kode untuk melihat output

Kerja bagus sudah sampai di sini

Itu menutup Python OOP. Kamu sudah membahas desain class dan instance, special method seperti __init__ / __add__ / __str__, pewarisan dengan super(), encapsulation dengan @property, polimorfisme, statement with, dan type hints — pada dasarnya semua tool yang kamu butuhkan untuk menyatukan data dan perilaku ke dalam satu tipe. Sekarang kamu bisa mendefinisikan tipe sendiri, melekatkan method padanya, dan memperlakukan beberapa tipe lewat antarmuka bersama.

Chapter berikutnya, Python Lanjutan, adalah tentang melampaui satu file: mengorganisasi modul dan package, dan menggunakan standard librarydatetime, os, re, json, collections, dataclasses, asyncio, dan banyak lagi — untuk membangun jenis pemrosesan yang akan kamu temui di kode produksi nyata.