Özet - Banka Hesabı Yöneticisi
Coddy'nin Python Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası. Ders 16 / 64.
Görev
OrtaDeğişkenler, gizli öznitelikler, özellikler, getter'lar, setter'lar ve metotlar dahil olmak üzere nesne yönelimli programlama kavramlarını gösteren eksiksiz bir BankAccount class'ı oluşturun.
1. Şunlara sahip bir BankAccount class'ı oluşturun:
interest_rate(%2) değerine ayarlanmış bir class değişkeni:0.02__owner_nameve__balanceiçin private örnek öznitelikleri- Bu öznitelikleri başlatan bir constructor
2. Property getter'larını ve setter'larını uygulayın:
- Hesap sahibinin adını döndüren salt okunur bir
owner_nameproperty'si - Şunlara sahip bir
balanceproperty'si:- Güncel bakiyeyi döndüren bir getter
- Para yatırma işlemlerini doğrulayan (negatif tutarları reddeden) bir setter
- Doğrulama başarısız olursa şunu yazdırın:
"Balance cannot be negative"
3. Metotları uygulayın:
- Şunları yapan
deposit(amount):- Tutar pozitifse bakiyeye ekler
- Tutar pozitif değilse
"Deposit amount must be positive"yazdırır veFalsedöndürür - Başarılı olduğunda
Truedöndürür
- Şunları yapan
withdraw(amount):- Tutar pozitifse ve yeterli bakiye varsa bakiyeden çıkarır
- Tutar pozitif değilse
"Withdrawal amount must be positive"yazdırır veFalsedöndürür - Tutar bakiyeyi aşarsa
"Insufficient funds"yazdırır veFalsedöndürür - Başarılı olduğunda
Truedöndürür
- Şunları yapan
apply_interest():- Class faiz oranına göre bakiyeye faiz ekler
- Faiz tutarını döndürür
Hesap ayrıntılarını aşağıdaki biçimde yazdıran
display_info():Account Owner: [owner_name] Balance: $[balance] Interest Rate: [interest_rate]%
Çıktı Biçimi Gereksinimleri
- Tüm doğrulama hata mesajları tam olarak belirtildiği şekilde yazdırılmalıdır
display_info()metodu çıktıyı tam olarak yukarıda gösterildiği gibi biçimlendirmelidir- Faiz oranı yüzde olarak görüntülenmelidir (100 ile çarpılmalıdır)
Kendin dene
from bank_account import BankAccount
# Test senaryosu işleyicisi
test_case = input()
if test_case == "account_creation":
# Hesap oluşturmayı test et
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":
# Para yatırma işlevini test et
account = BankAccount("Bob", 500)
print(f"Initial balance: ${account.balance}")
# Geçerli para yatırma
result = account.deposit(300)
print(f"Deposit result: {result}")
print(f"New balance: ${account.balance}")
# Geçersiz para yatırma
result = account.deposit(-50)
print(f"Negative deposit result: {result}")
print(f"Balance after invalid deposit: ${account.balance}")
elif test_case == "withdraw_method":
# Para çekme işlevini test et
account = BankAccount("Charlie", 1000)
# Geçerli para çekme
result = account.withdraw(400)
print(f"Withdrawal result: {result}")
print(f"Balance after withdrawal: ${account.balance}")
# Geçersiz para çekme (negatif)
result = account.withdraw(-50)
print(f"Negative withdrawal result: {result}")
# Geçersiz para çekme (bakiyeyi aşan)
result = account.withdraw(1000)
print(f"Excessive withdrawal result: {result}")
print(f"Final balance: ${account.balance}")
elif test_case == "property_access":
# Özellik erişimini ve korumasını test et
account = BankAccount("Dave", 800)
print(f"Owner via property: {account.owner_name}")
print(f"Balance via property: ${account.balance}")
# Bakiyeyi ayarlamaya çalış (setter kullanmalı)
account.balance = 1200
print(f"Balance after valid setter: ${account.balance}")
# Geçersiz bakiye dene
account.balance = -500
print(f"Balance after invalid setter: ${account.balance}")
# Özel niteliklere doğrudan erişmeyi dene (başarısız olmalı)
try:
print(account.__owner_name)
except AttributeError:
print("Cannot access private owner_name directly")
elif test_case == "apply_interest":
# Faiz uygulamasını test et
account = BankAccount("Eve", 2000)
# Orijinal bakiyeyi kontrol et
print(f"Initial balance: ${account.balance}")
# Faiz uygula
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":
# display_info metot formatını test et
account = BankAccount("Frank", 1500)
# Sınıf değişkenini test etmek için faiz oranını değiştir
original_rate = BankAccount.interest_rate
BankAccount.interest_rate = 0.03
print("Display info output:")
account.display_info()
# Orijinal oranı geri yükle
BankAccount.interest_rate = original_rate
elif test_case == "original_test_case":
# Yarışmadaki orijinal test kodunu çalıştır
account = BankAccount("Coddy", 1000)
# İşlemleri gerçekleştir
account.deposit(500)
account.withdraw(200)
account.apply_interest()
# Hesap bilgilerini görüntüle
account.display_info()
# Setter doğrulamasını test et
account.balance = 5000
print(f"Balance after setter: ${account.balance}")
# Para çekme doğrulamasını test et
account.withdraw(10000)
print(f"Final balance: ${account.balance}")Nesne Yönelimli Programlama bölümündeki tüm dersler
1OOP Temelleri
Harici DosyalarOOP'ye GirişSınıflar ve Nesnelerself ParametresiMetotlarÖzniteliklerYapıcı Metot (__init__)Özet - Basit Hesap Makinesi4Kalıtım
Temel Kalıtımsuper() FonksiyonuMetot Geçersiz KılmaÇoklu KalıtımMetot Çözümleme SırasıÖzet - Çalışan Hiyerarşisi7Özel Metotlar
Sihirli Metotlara GirişOperatör Aşırı YüklemeKapsayıcı Sihirli MetotlarıÖzet - Özel Liste10Tasarım Kalıpları Bölüm 1
Tasarım kalıplarına girişSingleton KalıbıFactory KalıbıObserver KalıbıStrategy Kalıbı13Final Meydan Okumaları
E-öğrenme PlatformuBankacılık SistemiOyun Karakteri GeliştirmeAraç Kiralama Servisi5Çok Biçimlilik (Polymorphism)
Metot Geçersiz Kılmaya Yeniden BakışDuck TypingSoyut Sınıflar ve MetotlarArayüz TasarımıÖzet - Şekil Hesaplayıcı8İleri Düzey OOP Kavramları
Kompozisyon ve KalıtımMixinsStatik ve Sınıf MetotlarıSınıf DekoratörleriBağlam Yöneticileri11Tasarım Kalıpları Bölüm 2
Komut KalıbıAdaptör KalıbıDekoratör KalıbıŞablon Metot KalıbıDurum KalıbıKompozit Kalıbı3Sınıf Özellikleri
Örnek ve Sınıf DeğişkenleriProperty DekoratörleriGizli ÖzniteliklerÖzet - Banka Hesabı YöneticisiKendi başına pratik yap: Online Python derleyicisi