Lập trình hướng đối tượng trong Python
Alex Yarosh
Content Quality Analyst @ DataCamp

# Withdraw amount from each of accounts in list_of_accounts def batch_withdraw(list_of_accounts, amount): for acct in list_of_accounts: acct.withdraw(amount)b, c, s = BankAccount(1000), CheckingAccount(2000), SavingsAccount(3000) batch_withdraw([b,c,s]) # <-- Will use BankAccount.withdraw(), # then CheckingAccount.withdraw(), # then SavingsAccount.withdraw()
batch_withdraw() không cần kiểm tra đối tượng để biết gọi withdraw() nào
Lớp cơ sở phải có thể thay thế bằng bất kỳ lớp dẫn xuất nào mà không làm thay đổi hành vi của chương trình
Ở đâu BankAccount dùng được, CheckingAccount cũng phải dùng được

Lớp cơ sở phải có thể thay thế bằng bất kỳ lớp dẫn xuất nào mà không làm thay đổi hành vi của chương trình
→ Không tương thích cú pháp
BankAccount.withdraw() cần 1 tham số, nhưng CheckingAccount.withdraw() cần 2
→ Lớp con siết chặt điều kiện đầu vào
BankAccount.withdraw() chấp nhận mọi số tiền, nhưng CheckingAccount.withdraw() giả định số tiền bị giới hạn
→ Lớp con nới lỏng điều kiện đầu ra
BankAccount.withdraw() chỉ để lại số dư dương hoặc báo lỗi, CheckingAccount.withdraw() có thể để số dư âm
→ Thay đổi thêm thuộc tính trong phương thức của lớp con
→ Ném thêm ngoại lệ trong phương thức của lớp con
$$\text{\textbf{\Huge{Không có LSP — không có kế thừa}}}$$
Lập trình hướng đối tượng trong Python