Rangkuman: Pengelola Rekening Bank
Termasuk bagian Pemrograman Berorientasi Objek dalam perjalanan Python di Coddy. Pelajaran 16 dari 64.
Tantangan
SedangBuat class BankAccount lengkap yang menunjukkan konsep pemrograman berorientasi objek, termasuk variabel class, atribut privat, property, getter, setter, dan method.
1. Buat class BankAccount dengan:
- Variabel class
interest_rateyang ditetapkan ke0.02(2%) - Atribut instance privat untuk
__owner_namedan__balance - Konstruktor yang menginisialisasi atribut ini
2. Implementasikan getter dan setter property:
- Property hanya-baca
owner_nameyang mengembalikan nama pemilik akun - Property
balancedengan:- Getter yang mengembalikan saldo saat ini
- Setter yang memvalidasi setoran (menolak jumlah negatif)
- Jika validasi gagal, cetak:
"Balance cannot be negative"
3. Implementasikan method:
deposit(amount)yang:- Menambahkan ke saldo jika jumlahnya positif
- Mencetak
"Deposit amount must be positive"dan mengembalikanFalsejika jumlahnya tidak positif - Mengembalikan
Truejika berhasil
withdraw(amount)yang:- Mengurangi saldo jika jumlahnya positif dan dana mencukupi
- Mencetak
"Withdrawal amount must be positive"dan mengembalikanFalsejika jumlahnya tidak positif - Mencetak
"Insufficient funds"dan mengembalikanFalsejika jumlahnya melebihi saldo - Mengembalikan
Truejika berhasil
apply_interest()yang:- Menambahkan bunga ke saldo berdasarkan suku bunga class
- Mengembalikan jumlah bunga
display_info()yang mencetak detail akun dalam format ini:Account Owner: [owner_name] Balance: $[balance] Interest Rate: [interest_rate]%
Persyaratan Format Output
- Semua pesan error validasi harus dicetak persis seperti yang ditentukan
- Method
display_info()harus memformat output persis seperti yang ditunjukkan di atas - Suku bunga harus ditampilkan sebagai persentase (kalikan dengan 100)
Coba sendiri
from bank_account import BankAccount
# Penangan kasus uji
test_case = input()
if test_case == "account_creation":
# Uji pembuatan rekening
account = BankAccount("Alice", 1000)
print(f"Owner: {account.owner_name}")
print(f"Initial balance: ${account.balance}")
print(f"Interest rate: {BankAccount.interest_rate * 100}%")
elif test_case == "deposit_method":
# Uji fungsi deposit
account = BankAccount("Bob", 500)
print(f"Initial balance: ${account.balance}")
# Deposit yang valid
result = account.deposit(300)
print(f"Deposit result: {result}")
print(f"New balance: ${account.balance}")
# Deposit yang tidak valid
result = account.deposit(-50)
print(f"Negative deposit result: {result}")
print(f"Balance after invalid deposit: ${account.balance}")
elif test_case == "withdraw_method":
# Uji fungsi penarikan
account = BankAccount("Charlie", 1000)
# Penarikan yang valid
result = account.withdraw(400)
print(f"Withdrawal result: {result}")
print(f"Balance after withdrawal: ${account.balance}")
# Penarikan yang tidak valid (negatif)
result = account.withdraw(-50)
print(f"Negative withdrawal result: {result}")
# Penarikan yang tidak valid (melebihi saldo)
result = account.withdraw(1000)
print(f"Excessive withdrawal result: {result}")
print(f"Final balance: ${account.balance}")
elif test_case == "property_access":
# Uji akses dan perlindungan property
account = BankAccount("Dave", 800)
print(f"Owner via property: {account.owner_name}")
print(f"Balance via property: ${account.balance}")
# Coba atur saldo (harus menggunakan setter)
account.balance = 1200
print(f"Balance after valid setter: ${account.balance}")
# Coba saldo yang tidak valid
account.balance = -500
print(f"Balance after invalid setter: ${account.balance}")
# Coba akses atribut privat secara langsung (seharusnya gagal)
try:
print(account.__owner_name)
except AttributeError:
print("Cannot access private owner_name directly")
elif test_case == "apply_interest":
# Uji penerapan bunga
account = BankAccount("Eve", 2000)
# Periksa saldo awal
print(f"Initial balance: ${account.balance}")
# Terapkan bunga
interest_earned = account.apply_interest()
expected_interest = 2000 * 0.02
print(f"Interest earned: ${interest_earned}")
print(f"New balance after interest: ${account.balance}")
print(f"Interest calculation correct: {interest_earned == expected_interest}")
elif test_case == "display_info":
# Uji format method display_info
account = BankAccount("Frank", 1500)
# Ubah suku bunga untuk menguji variabel class
original_rate = BankAccount.interest_rate
BankAccount.interest_rate = 0.03
print("Display info output:")
account.display_info()
# Kembalikan suku bunga semula
BankAccount.interest_rate = original_rate
elif test_case == "original_test_case":
# Jalankan kode uji asli dari tantangan
account = BankAccount("Coddy", 1000)
# Lakukan operasi
account.deposit(500)
account.withdraw(200)
account.apply_interest()
# Tampilkan informasi rekening
account.display_info()
# Uji validasi setter
account.balance = 5000
print(f"Balance after setter: ${account.balance}")
# Uji validasi penarikan
account.withdraw(10000)
print(f"Final balance: ${account.balance}")Semua pelajaran di Pemrograman Berorientasi Objek
1Dasar-Dasar OOP
File EksternalPengantar OOPclass vs objectParameter selfmethodAtributMethod Konstruktor (__init__)Rangkuman: Kalkulator Sederhana4Pewarisan
Pewarisan DasarFungsi super()Penimpaan MethodPewarisan BergandaUrutan Resolusi MethodRingkasan: Hierarki Karyawan5Polimorfisme
Meninjau Ulang Method OverridingDuck Typingclass dan method AbstrakDesain InterfaceRingkasan: Kalkulator Bentuk8Konsep OOP Lanjutan
Komposisi vs PewarisanMixinsMetode Statis dan Metode ClassDecorator ClassPengelola Konteks11Pola Desain Bagian 2
Pola PerintahPola AdapterPola DecoratorPola Template MethodPola StatePola Composite3Property class
Variabel instance vs variabel classDekorator propertyAtribut privatRangkuman: Pengelola Rekening Bank6Enkapsulasi
Anggota Public, Protected, PrivateModifier AksesPenyembunyian InformasiDecorator Property Tingkat LanjutUlasan: Sistem Catatan Siswa12Proyek: Manajemen Perpustakaan
Ikhtisar Proyekclass Buku dan PenggunaSistem PeminjamanFitur PencarianAntarmuka AdminPengujian dan IntegrasiLatihan sendiri: Compiler Python online