Bài 34. Kế thừa
Python Inheritance
Kế thừa trong Python (Inheritance)
Kế thừa là một tính năng mạnh mẽ trong lập trình hướng đối tượng.
Kế thừa (Inheritance) cho phép một lớp (class) có thể kế thừa các thuộc tính và phương thức từ các lớp khác đã được định nghĩa. Lớp đã có gọi là lớp cha (base class hoặc parent class), lớp mới phát sinh gọi là lớp con (child class hoặc derived class). Lớp con kế thừa tất cả thành phần của lớp cha, có thể mở rộng các thành phần kế thừa và bổ sung thêm các thành phần mới.
Cú pháp khai báo
Ví dụ về kế thừa trong Python
Xét ví dụ sau
Ở lớp Dagiac có các thuộc tính gồm số cạnh và một list lưu độ dài mỗi cạnh. Các phương thức nhapcanh() và xemcanh() để nhập độ dài cạnh và hiển thị các cạnh đã nhập.
Ta xây dựng class Tamgiac thừa kế từ lớp Dagiac. Theo đó lớp Tamgiac thừa kế tất cả các thuộc tính, phương thức từ lớp cha là class Dagiac. Vì vậy, dùng lớp Tamgiac không có phương thức nhapcanh() và xemcanh() nhưng ta vẫn có thể gọi và sử dụng trong chương trình.
Method Overriding in Python
Ở ví dụ trên ta thấy phương thức __init__() được khai báo ở cả 2 class (Dagiac và Tamgiac). Trong trường hợp này phương thức __init__() của lớp con sẽ ghi đề phương thức cùng tên của lớp cha. Nghĩa là phương thức instructor của Tamgiac ghi đè lên instructor của Dagiac.
Thông thường, việc ghi đè chỉ được dùng khi ta cần định nghĩa lại hoặc khai báo mới trong con so với lớp cha. Trường hợp không có gì khác thì gọi phương thức từ lớp cha để kế thừa (dùng lệnh gọi Dagiac.__init__()
trong __init__()
của Tamgiac
).
Cách tốt hơn và thường được dùng hơn khi gọi kế thừa __init__ từ lớp cha người ta dùng hàm có sẵn super(). Thay vì gọi Dagiac.__init__(self, 3)
thì ta có thể gọisuper().__init__(3)
.
Kiểm tra quan hệ 2 lớp
Hàm isinstance()
và issubclass()
được dùng để kiểm tra mối quan hệ của hai lớp và instance.
Hàm issubclass(A, B)
trả về True
nếu class A là lớp con của class B.
Hàm isinstance(a,B)
trả về True
nếu đối tượng a là một thể hiện (instance) của class B hoặc một class con của lớp B.
Ví dụ
Last updated