python-251Đọc toàn bộ đề miễn phí

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à

PythonCơ bản14 phút

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ủ đề

oopinheritancesuperdunder-strentry-ramp

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]".

3 cấp độ gợi ýMở dần khi bạn thật sự cần hỗ trợ.
Phân tích lời giảiGiải thích hướng tư duy và thuật toán.
Code tham khảoDùng để đối chiếu sau khi tự làm.

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.

Nhóm Zalo