סיכום – מנהל חשבון בנק
חלק מהיחידה תכנות מונחה עצמים במסלול ה-Python של Coddy. שיעור 16 מתוך 64.
אתגר
בינוניצרו מחלקה מלאה בשם BankAccount שמדגימה מושגים בתכנות מונחה עצמים, כולל משתני מחלקה, מאפיינים פרטיים, מאפיינים, getters, setters ומתודות.
1. צרו מחלקה בשם BankAccount עם:
- משתנה מחלקה
interest_rateשמוגדר לערך0.02(2%) - מאפייני מופע פרטיים עבור
__owner_nameו-__balance - בנאי שמאתחל את המאפיינים האלה
2. ממשו getters ו-setters של מאפיינים:
- מאפיין לקריאה בלבד בשם
owner_nameשמחזיר את שם בעל החשבון - מאפיין בשם
balanceעם:- getter שמחזיר את היתרה הנוכחית
- setter שמאמת הפקדות (ודוחה סכומים שליליים)
- אם האימות נכשל, הדפיסו:
"Balance cannot be negative"
3. ממשו מתודות:
deposit(amount)ש:- מוסיף ליתרה אם הסכום חיובי
- מדפיס
"Deposit amount must be positive"ומחזירFalseאם הסכום אינו חיובי - מחזיר
Trueבמקרה של הצלחה
withdraw(amount)ש:- מפחית מהיתרה אם הסכום חיובי ויש מספיק כספים
- מדפיס
"Withdrawal amount must be positive"ומחזירFalseאם הסכום אינו חיובי - מדפיס
"Insufficient funds"ומחזירFalseאם הסכום גבוה מהיתרה - מחזיר
Trueבמקרה של הצלחה
apply_interest()ש:- מוסיף ריבית ליתרה בהתאם לשיעור הריבית של המחלקה
- מחזיר את סכום הריבית
display_info()שמדפיסה את פרטי החשבון בפורמט הזה:Account Owner: [owner_name] Balance: $[balance] Interest Rate: [interest_rate]%
דרישות פורמט הפלט
- יש להדפיס את כל הודעות השגיאה של האימות בדיוק כפי שצוינו
- על המתודה
display_info()לעצב את הפלט בדיוק כפי שמוצג למעלה - יש להציג את שיעור הריבית כאחוז (להכפיל ב-100)
נסו בעצמכם
from bank_account import BankAccount
# מטפל במקרי בדיקה
test_case = input()
if test_case == "account_creation":
# בדיקת יצירת חשבון
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":
# בדיקת פעולת ההפקדה
account = BankAccount("Bob", 500)
print(f"Initial balance: ${account.balance}")
# הפקדה תקינה
result = account.deposit(300)
print(f"Deposit result: {result}")
print(f"New balance: ${account.balance}")
# הפקדה לא תקינה
result = account.deposit(-50)
print(f"Negative deposit result: {result}")
print(f"Balance after invalid deposit: ${account.balance}")
elif test_case == "withdraw_method":
# בדיקת פעולת המשיכה
account = BankAccount("Charlie", 1000)
# משיכה תקינה
result = account.withdraw(400)
print(f"Withdrawal result: {result}")
print(f"Balance after withdrawal: ${account.balance}")
# משיכה לא תקינה (סכום שלילי)
result = account.withdraw(-50)
print(f"Negative withdrawal result: {result}")
# משיכה לא תקינה (חורגת מהיתרה)
result = account.withdraw(1000)
print(f"Excessive withdrawal result: {result}")
print(f"Final balance: ${account.balance}")
elif test_case == "property_access":
# בדיקת גישה למאפיינים והגנה עליהם
account = BankAccount("Dave", 800)
print(f"Owner via property: {account.owner_name}")
print(f"Balance via property: ${account.balance}")
# ניסיון להגדיר את היתרה (יש להשתמש בפונקציית ההגדרה)
account.balance = 1200
print(f"Balance after valid setter: ${account.balance}")
# ניסיון להגדיר יתרה לא תקינה
account.balance = -500
print(f"Balance after invalid setter: ${account.balance}")
# נסה לגשת ישירות למאפיינים פרטיים (אמור להיכשל)
try:
print(account.__owner_name)
except AttributeError:
print("Cannot access private owner_name directly")
elif test_case == "apply_interest":
# בדוק את החלת הריבית
account = BankAccount("Eve", 2000)
# בדוק את היתרה המקורית
print(f"Initial balance: ${account.balance}")
# החל ריבית
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
account = BankAccount("Frank", 1500)
# שנה את שיעור הריבית כדי לבדוק משתנה מחלקה
original_rate = BankAccount.interest_rate
BankAccount.interest_rate = 0.03
print("Display info output:")
account.display_info()
# שחזר את שיעור הריבית המקורי
BankAccount.interest_rate = original_rate
elif test_case == "original_test_case":
# הרץ את קוד הבדיקה המקורי מהאתגר
account = BankAccount("Coddy", 1000)
# בצע פעולות
account.deposit(500)
account.withdraw(200)
account.apply_interest()
# הצג את פרטי החשבון
account.display_info()
# בדוק את האימות ב-setter
account.balance = 5000
print(f"Balance after setter: ${account.balance}")
# בדוק את האימות של משיכה
account.withdraw(10000)
print(f"Final balance: ${account.balance}")כל השיעורים ביחידה תכנות מונחה עצמים
1יסודות התכנות מונחה העצמים (OOP)
קבצים חיצונייםמבוא ל-OOPמחלקות לעומת אובייקטיםהפרמטר selfמתודותמאפייניםשיטת הבנאי (__init__)חזרה: מחשבון פשוט5פולימורפיזם
בחינה מחדש של דריסת מתודותטיפוסיות ברווזמחלקות ומתודות אבסטרקטיותעיצוב ממשקיםסיכום – מחשבון צורות8מושגים מתקדמים בתכנות מונחה עצמים
קומפוזיציה לעומת הורשהMixinsמתודות סטטיות ומתודות מחלקהדקורטורים למחלקותמנהלי הקשרתרגלו בעצמכם: קומפיילר Python אונליין