Kế thừa Python

Kế thừa Python

Kế thừa cho phép chúng ta định nghĩa lớp chứa tất cả các phương thức và thuộc tính kế thừa từ một lớp khác.

Lớp chaLà lớp kế thừa, cũng được gọi là lớp cơ sở.

Lớp conLà lớp kế thừa từ một lớp khác, cũng được gọi là lớp con.

Tạo lớp cha

Bất kỳ lớp nào cũng có thể là lớp cha, vì vậy cú pháp tạo lớp này cũng giống như tạo bất kỳ lớp nào khác:

Mô Hình

Tạo một lớp tên là Person, chứa các thuộc tính firstname và lastname cũng như 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)
# 使用 Person 来创建对象,然后执行 printname 方法:
x = Person("Bill", "Gates")
x.printname()

Chạy Mô Hình

创建子类

要创建从其他类继承功能的类,请在创建子类时将父类作为参数发送:

Mô Hình

创建一个名为 Student 的类,它将从 Person 类继承属性和方法:

class Student(Person):
  pass

注释:如果您不想向该类添加任何其他属性或方法,请使用 pass 关键字。

现在,Student 类拥有与 Person 类相同的属性和方法。

Mô Hình

使用 Student 类创建一个对象,然后执行 printname 方法:

x = Student("Elon", "Musk")
x.printname()

Chạy Mô Hình

添加 __init__() 函数

到目前为止,我们已经创建了一个子类,它继承了父类的属性和方法。

我们想要把 __init__() 函数添加到子类(而不是 pass 关键字)。

注释:每次使用类创建新对象时,都会自动调用 __init__() 函数。

Mô Hình

为 Student 类添加 __init__() 函数:

class Student(Person):
  def __init__(self, fname, lname):
    # 添加属性等

当您添加 __init__() 函数时,子类将不再继承父的 __init__() 函数。

注释:子的 __init__() 函数会覆盖对父的 __init__() 函数的继承。

如需保持父的 __init__() 函数的继承,请添加对父的 __init__() 函数的调用:

Mô Hình

class Student(Person):
  def __init__(self, fname, lname):
    Person.__init__(self, fname, lname)

Chạy Mô Hình

现在,我们已经成功添加了 __init__() 函数,并保留了父类的继承,我们准备好在 __init__() 函数中添加功能了。

使用 super() 函数

Python 还有一个 super() 函数,它会使子类从其父继承所有方法和属性:

Mô Hình

class Student(Person):
  def __init__(self, fname, lname):
    super().__init__(fname, lname)

Chạy Mô Hình

通过使用 super() 函数,您不必使用父元素的名称,它将自动从其父元素继承方法和属性。

添加属性

Mô Hình

Tên graduationyear 的属性添加到 Student 类:

class Student(Person):
  def __init__(self, fname, lname):
    super().__init__(fname, lname)
    self.graduationyear = 2019

Chạy Mô Hình

Trong ví dụ này, năm 2019 nên là một biến và được truyền sang lớp Student khi tạo đối tượng student. Để làm điều này, hãy thêm một tham số khác vào hàm __init__():

Mô Hình

Thêm year tham số, và truyền đúng năm khi tạo đối tượng:

class Student(Person):
  def __init__(self, fname, lname, year)
    super().__init__(fname, lname)
    self.graduationyear = year
x = Student("Elon", "Musk", 2019)

Chạy Mô Hình

Thêm Phương Pháp

Mô Hình

Tên welcome thêm phương pháp 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("Chào Mừng", self.firstname, self.lastname, "đến lớp của", self.graduationyear)

Chạy Mô Hình

Lưu ý:Nếu bạn thêm một phương pháp có tên trùng với phương pháp của lớp cha trong lớp con, phương pháp cha sẽ bị che phủ bởi di truyền.