Kế thừa là một khía cạnh quan trọng của mô hì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à chức năng được xác định trong lớp cha. Một lớp con cũng có thể cung cấp cách triển khai cụ thể của nó cho các chức năng của lớp cha. Trong phần này của hướng dẫn, chúng ta sẽ thảo luận chi tiết về thừa kế
Trong python, một lớp dẫn xuất có thể kế thừa lớp cơ sở bằng cách chỉ cần nhắc đến cơ sở trong dấu ngoặc sau tên lớp dẫn xuất. Xem xét cú pháp sau để kế thừa một lớp cơ sở vào lớp dẫn xuất
cú pháp
Một lớp có thể kế thừa nhiều lớp bằng cách đề cập tất cả chúng bên trong dấu ngoặc. Hãy xem xét cú pháp sau
cú pháp
ví dụ 1
đầu ra
dog barking Animal Speaking
Kế thừa đa cấp Python
Có thể kế thừa đa cấp trong python giống như các ngôn ngữ hướng đối tượng khác. Kế thừa đa cấp được lưu trữ 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 được lưu trữ trong python
Cú pháp kế thừa đa cấp được đưa ra dưới đây
cú pháp
Thí dụ
đầu ra
dog barking Animal Speaking Eating bread...
Đa kế thừa 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
Cú pháp để thực hiện đa thừa kế được đưa ra dưới đây
cú pháp
Thí dụ
đầu ra
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 đầu tiên là lớp con của lớp thứ hai và sai nếu ngược lại
Xem xét ví dụ sau
Thí dụ
đầu ra
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, i. e. , obj là thể hiện của tham số thứ hai, i. e. , lớp
Xem xét ví dụ sau
Thí dụ
đầu ra
Ghi đè phương thức
Chúng tôi có thể cung cấp một số triển khai cụ thể của phương thức lớp cha trong lớp con của chúng tôi. Khi phương thức của lớp cha được định nghĩa trong lớp con với một số triển khai cụ thể, thì khái niệm này được gọi là ghi đè phương thức. Chúng ta có thể cần thực hiện ghi đè phương thức trong trường hợp cần định nghĩa khác về phương thức của lớp cha trong lớp con
Xét ví dụ sau để thực hiện ghi đè phương thức trong python
Thí dụ
đầu ra
Ví dụ thực tế về ghi đè phương thức
đầu ra
Bank Rate of interest: 10 SBI Rate of interest: 7 ICICI Rate of interest: 8
Trừu tượng hóa dữ liệu trong python
Trừu tượng hóa là một khía cạnh quan trọng của lập trình hướng đối tượng. Trong python, chúng ta cũng có thể thực hiện ẩn dữ liệu bằng cách thêm dấu gạch dưới kép [___] làm tiền tố cho thuộc tính cần ẩn. Sau này, thuộc tính sẽ không hiển thị bên ngoài lớp thông qua đối tượng
Nó đề cập đến việc xác định một lớp mới với ít hoặc không sửa đổi lớp hiện có. Lớp mới được gọi là lớp dẫn xuất [hoặc lớp con] và lớp mà nó kế thừa từ đó được gọi là lớp cơ sở [hoặc lớp cha]
Cú pháp kế thừa Python
class BaseClass: Body of base class class DerivedClass[BaseClass]: Body of derived class
Lớp dẫn xuất kế thừa các tính năng từ lớp cơ sở nơi các tính năng mới có thể được thêm vào nó. Điều này dẫn đến khả năng sử dụng lại mã
Ví dụ về tính kế thừa trong Python
Để chứng minh việc sử dụng thừa kế, chúng ta hãy lấy một ví dụ
Đa giác là hình khép kín có 3 cạnh trở lên. Giả sử, chúng ta có một lớp tên là
Bank Rate of interest: 10 SBI Rate of interest: 7 ICICI Rate of interest: 82 được định nghĩa như sau
class Polygon:
def __init__[self, no_of_sides]:
self.n = no_of_sides
self.sides = [0 for i in range[no_of_sides]]
def inputSides[self]:
self.sides = [float[input["Enter side "+str[i+1]+" : "]] for i in range[self.n]]
def dispSides[self]:
for i in range[self.n]:
print["Side",i+1,"is",self.sides[i]]
Lớp này có các thuộc tính dữ liệu để lưu trữ số cạnh n và độ lớn của mỗi cạnh dưới dạng danh sách được gọi là các mặt
Phương pháp
Bank Rate of interest: 10 SBI Rate of interest: 7 ICICI Rate of interest: 83 lấy độ lớn của mỗi cạnh và
Bank Rate of interest: 10 SBI Rate of interest: 7 ICICI Rate of interest: 84 hiển thị độ dài các cạnh này
Tam giác là đa giác có 3 cạnh. Vì vậy, chúng ta có thể tạo một lớp gọi là Tam giác kế thừa từ Đa giác. Điều này làm cho tất cả các thuộc tính của lớp Đa giác có sẵn cho lớp Tam giác
Chúng tôi không cần phải xác định lại chúng [khả năng sử dụng lại mã]. Tam giác có thể được định nghĩa như sau
class Triangle[Polygon]:
def __init__[self]:
Polygon.__init__[self,3]
def findArea[self]:
a, b, c = self.sides
# calculate the semi-perimeter
s = [a + b + c] / 2
area = [s*[s-a]*[s-b]*[s-c]] ** 0.5
print['The area of the triangle is %0.2f' %area]
Tuy nhiên, lớp
Bank Rate of interest: 10 SBI Rate of interest: 7 ICICI Rate of interest: 85 có một phương pháp mới
class Polygon:
def __init__[self, no_of_sides]:
self.n = no_of_sides
self.sides = [0 for i in range[no_of_sides]]
def inputSides[self]:
self.sides = [float[input["Enter side "+str[i+1]+" : "]] for i in range[self.n]]
def dispSides[self]:
for i in range[self.n]:
print["Side",i+1,"is",self.sides[i]]
0 để tìm và in diện tích tam giác. Đây là một mẫu chạy>>> t = Triangle[]
>>> t.inputSides[]
Enter side 1 : 3
Enter side 2 : 5
Enter side 3 : 4
>>> t.dispSides[]
Side 1 is 3.0
Side 2 is 5.0
Side 3 is 4.0
>>> t.findArea[]
The area of the triangle is 6.00
Chúng ta có thể thấy rằng mặc dù chúng ta không định nghĩa các phương thức như
Bank Rate of interest: 10 SBI Rate of interest: 7 ICICI Rate of interest: 83 hoặc
Bank Rate of interest: 10 SBI Rate of interest: 7 ICICI Rate of interest: 84 cho lớp
Bank Rate of interest: 10 SBI Rate of interest: 7 ICICI Rate of interest: 85 một cách riêng biệt, chúng ta vẫn có thể sử dụng chúng
Nếu một thuộc tính không được tìm thấy trong chính lớp đó, việc tìm kiếm sẽ tiếp tục đến lớp cơ sở. Điều này lặp lại một cách đệ quy, nếu chính lớp cơ sở được dẫn xuất từ các lớp khác
Ghi đè phương thức trong Python
Trong ví dụ trên, lưu ý rằng phương thức
class Polygon:
def __init__[self, no_of_sides]:
self.n = no_of_sides
self.sides = [0 for i in range[no_of_sides]]
def inputSides[self]:
self.sides = [float[input["Enter side "+str[i+1]+" : "]] for i in range[self.n]]
def dispSides[self]:
for i in range[self.n]:
print["Side",i+1,"is",self.sides[i]]
4 được định nghĩa trong cả hai lớp, Tam giác cũng như Đa giác. Khi điều này xảy ra, phương thức trong lớp dẫn xuất sẽ ghi đè phương thức trong lớp cơ sở. Điều này có nghĩa là, class Polygon:
def __init__[self, no_of_sides]:
self.n = no_of_sides
self.sides = [0 for i in range[no_of_sides]]
def inputSides[self]:
self.sides = [float[input["Enter side "+str[i+1]+" : "]] for i in range[self.n]]
def dispSides[self]:
for i in range[self.n]:
print["Side",i+1,"is",self.sides[i]]
4 trong Tam giác được ưu tiên hơn class Polygon:
def __init__[self, no_of_sides]:
self.n = no_of_sides
self.sides = [0 for i in range[no_of_sides]]
def inputSides[self]:
self.sides = [float[input["Enter side "+str[i+1]+" : "]] for i in range[self.n]]
def dispSides[self]:
for i in range[self.n]:
print["Side",i+1,"is",self.sides[i]]
6 trong Đa giácNói chung, khi ghi đè một phương thức cơ sở, chúng ta có xu hướng mở rộng định nghĩa hơn là chỉ thay thế nó. Điều tương tự cũng được thực hiện bằng cách gọi phương thức trong lớp cơ sở từ phương thức trong lớp dẫn xuất [gọi
class Polygon:
def __init__[self, no_of_sides]:
self.n = no_of_sides
self.sides = [0 for i in range[no_of_sides]]
def inputSides[self]:
self.sides = [float[input["Enter side "+str[i+1]+" : "]] for i in range[self.n]]
def dispSides[self]:
for i in range[self.n]:
print["Side",i+1,"is",self.sides[i]]
7 từ class Polygon:
def __init__[self, no_of_sides]:
self.n = no_of_sides
self.sides = [0 for i in range[no_of_sides]]
def inputSides[self]:
self.sides = [float[input["Enter side "+str[i+1]+" : "]] for i in range[self.n]]
def dispSides[self]:
for i in range[self.n]:
print["Side",i+1,"is",self.sides[i]]
4 trong Bank Rate of interest: 10 SBI Rate of interest: 7 ICICI Rate of interest: 85]
Một lựa chọn tốt hơn là sử dụng chức năng tích hợp sẵn
class Triangle[Polygon]:
def __init__[self]:
Polygon.__init__[self,3]
def findArea[self]:
a, b, c = self.sides
# calculate the semi-perimeter
s = [a + b + c] / 2
area = [s*[s-a]*[s-b]*[s-c]] ** 0.5
print['The area of the triangle is %0.2f' %area]
0. Vì vậy, class Triangle[Polygon]:
def __init__[self]:
Polygon.__init__[self,3]
def findArea[self]:
a, b, c = self.sides
# calculate the semi-perimeter
s = [a + b + c] / 2
area = [s*[s-a]*[s-b]*[s-c]] ** 0.5
print['The area of the triangle is %0.2f' %area]
1 tương đương với class Triangle[Polygon]:
def __init__[self]:
Polygon.__init__[self,3]
def findArea[self]:
a, b, c = self.sides
# calculate the semi-perimeter
s = [a + b + c] / 2
area = [s*[s-a]*[s-b]*[s-c]] ** 0.5
print['The area of the triangle is %0.2f' %area]
2 và được ưu tiên. Để tìm hiểu thêm về hàm class Triangle[Polygon]:
def __init__[self]:
Polygon.__init__[self,3]
def findArea[self]:
a, b, c = self.sides
# calculate the semi-perimeter
s = [a + b + c] / 2
area = [s*[s-a]*[s-b]*[s-c]] ** 0.5
print['The area of the triangle is %0.2f' %area]
0 trong Python, hãy truy cập Hàm super[] của PythonHai hàm có sẵn
class Triangle[Polygon]:
def __init__[self]:
Polygon.__init__[self,3]
def findArea[self]:
a, b, c = self.sides
# calculate the semi-perimeter
s = [a + b + c] / 2
area = [s*[s-a]*[s-b]*[s-c]] ** 0.5
print['The area of the triangle is %0.2f' %area]
4 và class Triangle[Polygon]:
def __init__[self]:
Polygon.__init__[self,3]
def findArea[self]:
a, b, c = self.sides
# calculate the semi-perimeter
s = [a + b + c] / 2
area = [s*[s-a]*[s-b]*[s-c]] ** 0.5
print['The area of the triangle is %0.2f' %area]
5 dùng để kiểm tra thừa kếHàm
class Triangle[Polygon]:
def __init__[self]:
Polygon.__init__[self,3]
def findArea[self]:
a, b, c = self.sides
# calculate the semi-perimeter
s = [a + b + c] / 2
area = [s*[s-a]*[s-b]*[s-c]] ** 0.5
print['The area of the triangle is %0.2f' %area]
4 trả về class Triangle[Polygon]:
def __init__[self]:
Polygon.__init__[self,3]
def findArea[self]:
a, b, c = self.sides
# calculate the semi-perimeter
s = [a + b + c] / 2
area = [s*[s-a]*[s-b]*[s-c]] ** 0.5
print['The area of the triangle is %0.2f' %area]
7 nếu đối tượng là một thể hiện của lớp hoặc các lớp khác dẫn xuất từ nó. Mỗi và mọi lớp trong Python kế thừa từ lớp cơ sở class Triangle[Polygon]:
def __init__[self]:
Polygon.__init__[self,3]
def findArea[self]:
a, b, c = self.sides
# calculate the semi-perimeter
s = [a + b + c] / 2
area = [s*[s-a]*[s-b]*[s-c]] ** 0.5
print['The area of the triangle is %0.2f' %area]
8