Ở bài này ta sẽ tìm hiểu về Kế thừa trong python.Một tính chất quan trọng giúp ta làm việc dễ dàng hơn với python
Kế thừa trong python là gì?
- 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, vì vậy 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 firstname và lastname các thuộc tính và một printnamephương thức:
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()
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 Student có các thuộc tính và phương thức giống như lớp Person.
Ví dụ: Sử dụng Studentlớp này để tạo một đối tượng và sau đó thực thi phương thức printname:
x = Student("Mike", "Olsen") x.printname()
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 ta muốn thêm hàm __init__() vào lớp con
Lưu ý: Hàm này __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.
Hàm __init__() con sẽ ghi đè sự kế thừa hàm __init__() của cha.
Để giữ tính kế thừa của hàm __init__() cha, hãy thêm lệnh gọi vào hàm __init__() cha:
class Student(Person): def __init__(self, fname, lname): Person.__init__(self, fname, lname)
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ó:
class Student(Person): def __init__(self, fname, lname): super().__init__(fname, lname)
Khi 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 gọi là graduationyear vào lớp Student:
class Student(Person): def __init__(self, fname, lname): super().__init__(fname, lname) self.graduationyear = 2019
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 Student. Để làm như vậy, hãy thêm một tham số khác vào hàm __init__():
class Student(Person): def __init__(self, fname, lname, year): super().__init__(fname, lname) self.graduationyear = year x = Student("Mike", "Olsen", 2019)
Thêm phương thức
Ví dụ: Thêm một phương thức được gọi welcome vào 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)
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 đè.
Nếu bạn là newbie có thể tham khảo bài viết này để tìm hiểu lộ trình học DA trong 3 tháng của SmartData.
Nếu bạn thấy bài viết hay và hữu ích, bạn có thể tham gia các kênh sau của SmartData để nhận được nhiều hơn nữa: