Kế thừa Python
Kế thừa Python
Kế thừa cho phép chúng ta định nghĩa một lớp kế thừa tất cả các phương thức và thuộc tính từ một lớp khác.
Lớp cha là lớp được kế thừa từ đó, còn gọi là lớp cơ sở.
Lớp con là lớp kế thừa từ lớp khác, còn gọi là lớp dẫn xuất.
Tạo một lớp cha mẹ
Bất kỳ lớp nào cũng có thể là lớp cha, do đó cú pháp giống như tạo bất kỳ lớp nào khác:
Ví dụ
Tạo một lớp có tên Person
, với các thuộc tính firstname
và lastname
và phương thức printname
:
class Person:
def __init__(self, fname, lname):
self.firstname = fname
self.lastname = lname
def printname(self):
print(self.firstname,
self.lastname)
#Use the Person class to create an object, and then
execute the printname method:
x = Person("John", "Doe")
x.printname()
Hãy tự mình thử »Tạo một lớp con
Để tạo một lớp kế thừa chức năng từ một lớp khác, hãy gửi lớp cha làm tham số khi tạo lớp con:
Ví dụ
Tạo một lớp có tên Student
, lớp này sẽ kế thừa các thuộc tính và phương thức từ lớp Person
:
class Student(Person):
pass
Lưu ý: Sử dụng từ khóa pass
khi bạn không muốn thêm bất kỳ thuộc tính hoặc phương thức nào khác vào lớp.
Bây giờ lớp Sinh viên có các thuộc tính và phương thức giống như lớp Người.
Ví dụ
Sử dụng lớp Student
để tạo một đối tượng, sau đó thực thi phương thức printname
:
x = Student("Mike", "Olsen")
x.printname()
Hãy tự mình thử » Thêm hàm __init__()
Cho đến nay chúng ta đã tạo một lớp con kế thừa các thuộc tính và phương thức từ lớp cha của nó.
Chúng tôi muốn thêm hàm __init__()
vào lớp con (thay vì từ khóa pass
).
Lưu ý: Hàm __init__()
được gọi tự động mỗi khi lớp được sử dụng để tạo đối tượng mới.
Ví dụ
Thêm hàm __init__()
vào lớp Student
:
class Student(Person):
def __init__(self, fname, lname):
#add properties etc.
Khi bạn thêm hàm __init__()
, lớp con sẽ không còn kế thừa hàm __init__()
của lớp cha nữa.
Lưu ý: Hàm __init__()
của con sẽ ghi đè sự kế thừa của hàm __init__()
của cha.
Để giữ tính kế thừa của hàm __init__()
của cha mẹ, hãy thêm lệnh gọi vào hàm __init__()
của cha mẹ:
Ví dụ
class Student(Person):
def __init__(self, fname, lname):
Person.__init__(self, fname, lname)
Hãy tự mình thử » Bây giờ chúng ta đã thêm thành công hàm __init__() và giữ lại tính kế thừa của lớp cha, đồng thời chúng ta đã sẵn sàng thêm chức năng vào hàm __init__()
.
Sử dụng hàm super()
Python cũng có một hàm super()
sẽ làm cho lớp con kế thừa tất cả các phương thức và thuộc tính từ lớp cha của nó:
Ví dụ
class Student(Person):
def __init__(self, fname, lname):
super().__init__(fname, lname)
Hãy tự mình thử » Bằng cách sử dụng hàm super()
, bạn không cần phải sử dụng tên của phần tử cha, nó sẽ tự động kế thừa các phương thức và thuộc tính từ phần tử cha của nó.
Thêm thuộc tính
Ví dụ
Thêm một thuộc tính có tên là graduationyear
vào lớp Student
:
class Student(Person):
def __init__(self, fname, lname):
super().__init__(fname, lname)
self.graduationyear
= 2019
Hãy tự mình thử » Trong ví dụ bên dưới, năm 2019
phải là một biến và được chuyển vào lớp Student
khi tạo đối tượng sinh viên. Để làm như vậy, hãy thêm một tham số khác vào hàm __init__():
Ví dụ
Thêm tham số year
và chuyển năm chính xác khi tạo đối tượng:
class Student(Person):
def __init__(self, fname, lname, year):
super().__init__(fname, lname)
self.graduationyear
= year
x = Student("Mike", "Olsen", 2019)
Hãy tự mình thử »Thêm phương thức
Ví dụ
Thêm một phương thức có tên là welcome
đến với lớp Student
:
class Student(Person):
def __init__(self, fname, lname, year):
super().__init__(fname, lname)
self.graduationyear
= year
def welcome(self):
print("Welcome",
self.firstname, self.lastname, "to the class of", self.graduationyear)
Hãy tự mình thử »Nếu bạn thêm một phương thức vào lớp con có cùng tên với một hàm trong lớp cha, thì sự kế thừa của phương thức cha sẽ bị ghi đè.