Kế thừa trong Python
Kế thừa trong lập trình hướng đối tượng cho phép chúng ta khai báo lớp mới sử dụng lại các hàm và thuộc tính của lớp cha cùng các chức năng mở rộng thêm. Trong bài viết này, eLib.VN sẽ cùng bạn học cách sử dụng tính kế thừa trong Python.
Mục lục nội dung
1. Khái niệm kế thừa trong Python
Kế thừa là một khía cạnh quan trọng của mô hình lập trình hướng đối tượng. Kế thừa cung cấp khả năng sử dụng lại mã cho chương trình vì chúng ta có thể sử dụng một lớp hiện có để tạo một lớp mới thay vì tạo nó từ đầu.
Trong kế thừa, lớp con có được các thuộc tính và có thể truy cập tất cả các thành viên dữ liệu và các hàm được định nghĩa trong lớp cha. Một lớp con cũng có thể cung cấp việc triển khai cụ thể cho các hàm của lớp cha. Trong bài này, chúng ta sẽ thảo luận chi tiết về kế thừa.
Trong python, một lớp dẫn xuất (hay còn gọi là lớp con - sub-class) có thể kế thừa lớp cơ sở (lớp cha - super-class) bằng cách chỉ đề cập đến cơ sở trong ngoặc sau tên lớp dẫn xuất. Sau đây là cú pháp để một lớp cơ sở kế thừa lớp dẫn xuất.
Cú pháp đơn kế thừa
class derived-class(base class):
<class-suite>
Ví dụ đơn kế thừa trong Python
class Animal:
def speak(self):
print("Animal Speaking")
# lớp con Dog kế thừa lớp Animal
class Dog(Animal):
def bark(self):
print("Gou gou!")
d = Dog()
d.bark()
d.speak()
Gou gou!
Animal Speaking
2. Kế thừa đa cấp trong Python
Kế thừa đa cấp có thể có trong python như các ngôn ngữ hướng đối tượng khác. Kế thừa đa cấp khi một lớp dẫn xuất kế thừa một lớp dẫn xuất khác. Không có giới hạn về số lượng cấp độ, kế thừa đa cấp trong python.
Cú pháp kế thừa đa cấp
class class1:
<class-suite>
class class2(class1):
<class suite>
class class3(class2):
<class suite>
...
class classN(classN-1):
<class suite>
Ví dụ kế thừa đa cấp trong Python
class Animal:
def speak(self):
print("Animal Speaking")
# lớp con Dog kế thừa lớp Animal
class Dog(Animal):
def bark(self):
print("Gou gou!")
# lớp con Dogchild kế thừa lớp Dog
class DogChild(Dog):
def eat(self):
print("Eating milk...")
d = DogChild()
d.bark()
d.speak()
d.eat()
d.speak()
Kết quả:
Gou gou!
Animal Speaking
Eating milk...
Animal Speaking
3. Đa thừa kế trong Python
Python cung cấp cho chúng ta sự linh hoạt để kế thừa nhiều lớp cơ sở trong lớp con.
Một lớp có thể kế thừa nhiều lớp bằng cách đề cập đến tất cả chúng trong dấu ngoặc. Hãy xem xét cú pháp sau đây.
Cú pháp đa kế thừa
class Base1:
<class-suite>
class Base2:
<class-suite>
...
class BaseN:
<class-suite>
class Derived(Base1, Base2, ...... BaseN):
<class-suite>
Ví dụ đa kế thừa trong Python
class Calculation1:
def Summation(self, a, b):
return a + b;
class Calculation2:
def Multiplication(self, a, b):
return a * b;
class Derived(Calculation1, Calculation2):
def Divide(self, a, b):
return a / b;
d = Derived()
print(d.Summation(10, 20))
print(d.Multiplication(10, 20))
print(d.Divide(10, 20))
Kết quả:
30
200
0.5
Phương thức issubclass(sub,sup)
Phương thức issubclass(sub, sup) được sử dụng để kiểm tra mối quan hệ giữa các lớp được chỉ định. Nó trả về true nếu lớp thứ nhất là lớp con của lớp thứ hai và ngược lại là false.
class Calculation1:
def Summation(self, a, b):
return a + b;
class Calculation2:
def Multiplication(self, a, b):
return a * b;
class Derived(Calculation1, Calculation2):
def Divide(self, a, b):
return a / b;
print("Derived là con của Calculation2:", issubclass(Derived,Calculation2))
print("Calculation1 là con của Calculation2:", issubclass(Calculation1,Calculation2))
Kết quả:
Derived là con của Calculation2: True
Calculation1 là con của Calculation2: False
Phương thức isinstance (obj, class)
Phương thức isinstance () được sử dụng để kiểm tra mối quan hệ giữa các đối tượng và các lớp. Nó trả về true nếu tham số đầu tiên, tức là obj là thể hiện của tham số thứ hai, tức là lớp.
class Calculation1:
def Summation(self, a, b):
return a + b;
class Calculation2:
def Multiplication(self, a, b):
return a * b;
class Derived(Calculation1, Calculation2):
def Divide(self, a, b):
return a / b;
d = Derived()
print("Đối tượng d là thể hiện của lớp Derived: ", isinstance(d,Derived))
Kết quả:
Đối tượng d là thể hiện của lớp Derived: True
Trên đây là bài viết của eLib.VN về kế thừa trong Python. Hy vọng bài viết hữu ích cho những bạn đang nghiên cứu về lập trình hướng đối tượng của Python. Chúc các bạn thành công và đam mê với con đường lập trình.
Tham khảo thêm
- doc Lập trình hướng đối tượng trong Python
- doc Lớp và đối tượng trong Python
- doc Constructor trong Python
- doc Ghi đè phương thức trong Python
- doc Trừu tượng dữ liệu trong Python