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()
Kết quả:
Gou gou! Animal Speaking
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
Đ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