Kế thừa tài khoản tiết kiệm với `super()`
Tài khoản tiết kiệm làm được mọi việc của tài khoản thường, rồi thêm một việc riêng là
Tiến độ của tôi ở bài này
Điểm và code bạn nộp được lưu vào tài khoản sau khi chấm bài.
Đang tải điểm của bạn…
Kiến thức và chủ đề
Kiến thức tiên quyết: python-basics, python-classes-intro, python-oop-properties.
Nội dung đề bài
Mô tả bài toán
Tài khoản tiết kiệm làm được mọi việc của tài khoản thường, rồi thêm một việc riêng là sinh lãi. Thay vì chép lại mã nạp và rút, lớp con nên thừa hưởng lớp cha và gọi super() khi cần hành vi cũ. Bài này luyện đúng ba thứ: kế thừa, super(), và str có gọi lại str của lớp cha.
Yêu cầu
Cài đặt hai lớp trong cùng một tệp.
Lớp BankAccount:
- hằng số cấp lớp BANK_NAME và MIN_BALANCE = 0.0.
- init(self, owner, balance=0.0): lưu owner (chuỗi khác rỗng, ngược lại ném
ValueError) và số dư trong self._owner, self._balance (kiểu float); ném ValueError nếu balance âm.
- deposit(self, amount): cộng vào số dư; ném ValueError nếu amount âm; trả None.
- withdraw(self, amount): trừ khỏi số dư; ném ValueError nếu amount âm hoặc lớn
hơn số dư hiện tại; trả None.
- current_balance(self): trả về số dư hiện tại.
- str(self): trả về chuỗi dạng "<owner>: <số dư với 2 chữ số thập phân>".
Lớp SavingsAccount kế thừa BankAccount:
- hằng số cấp lớp INTEREST_RATE = 0.05.
- add_interest(self): lãi bằng số dư * INTEREST_RATE, cộng vào số dư qua
super().deposit(...); trả None.
- str(self): chuỗi của lớp cha, thêm hậu tố " [Tiet kiem]".
Quy ước nộp bài
Nộp hai lớp BankAccount và SavingsAccount trong solution.py; entry là SavingsAccount. Hệ thống khởi tạo lớp rồi gọi phương thức trực tiếp, kể cả gọi str, và bắt ngoại lệ ValueError; không dùng stdin/stdout.
Input
Hệ thống khởi tạo SavingsAccount bằng hai tham số từ khoá owner và balance, rồi gọi lần lượt các phương thức theo kịch bản của từng bộ test.
Output
Danh sách giá trị trả về theo đúng thứ tự gọi. deposit, withdraw và add_interest trả None.
Ràng buộc
- Số dư không bao giờ âm; mọi thao tác sai miền giá trị đều ném ValueError.
- Lớp con không chép lại mã nạp/rút, mà dùng lại lớp cha.
- str của lớp con phải chứa cả chuỗi của lớp cha.
Ví dụ 1
Input
SavingsAccount(init={"owner": "An", "balance": 1000}, methods=[{"method": "current_balance"}, {"method": "__str__"}])
Output
[1000.0, "An: 1000.00 [Tiet kiem]"]
Ví dụ 2
Input
SavingsAccount(init={"owner": "Binh", "balance": 2000}, methods=[{"method": "add_interest"}, {"method": "current_balance"}])
Output
[null, 2100.0]
Giải thích
SavingsAccount(owner="An", balance=1000) rồi add_interest() cho số dư 1050.0, vì 1000 * 0.05 = 50. Chuỗi của đối tượng đó là "An: 1000.00 [Tiet kiem]".
Gợi ý và lời giải chỉ mở sau khi bạn bấm Nộp bài. Giáo viên và quản trị viên mở được ngay.
Góp ý & báo lỗi bài tập
Đề bài chưa rõ, test có vấn đề hay bạn có ý tưởng giúp bài tốt hơn? Gửi cho đội ngũ AI Empire nhé — mỗi góp ý đều được đọc.
