Python 继承

在 Python 中,继承(Inheritance)是 “面向对象编程(OOP)” 的三大特性之一,另外两个是封装和多态。继承允许我们定义一个基类(或称为父类),然后其他类(称为派生类或子类)可以继承这个基类,并获得基类的属性和方法。这极大地提高了代码的重用性。

Python 继承是什么?

在实际开发中,小伙伴们可能会碰到这样的情况:需要定义多个类,但是这些类之间有相当一部分的属性和方法都是相同的。也就是说,对于这些相同的属性和方法,我们在每个类中都要定义一遍。

在 Python 中,我们可以把这些相同的部分提取成一个父类,然后让这些子类去 “继承” 父类,这样就不用写那么多重复的代码了。比如有两个类:Teacher 和 Student,这两个类都有 “人” 的共同特征,我们可以把这两个类的共同部分提取出来,然后将其定义成一个 Person 类,之后再让 Teacher 和 Student 这两个类去继承这个 Person 类。

语法:

class 子类名 (父类名):
        ……

说明:

想要让子类继承父类的属性和方法,只需要在类名后面加上一个 “()”,并且在 “()” 内写上 “父类名” 就可以了。这个有点类似于函数传参。

Python 继承示例

接下来,我们通过几个简单的例子来讲解 Python 继承是如何使用的。

示例 1:继承的基本用法

# 定义父类
class Person:
    type = 'human'
    def walk(self):
        print('walking')

# 定义子类,并继承父类
class Student(Person):
    def __init__(self, name, age):
        self.name = name
        self.age = age
    def getname(self):
        print(self.name)

# 实例化对象
s = Student('Jack', 18)
print(s.type)
s.walk()

运行结果如下。

human
walking

分析:

这个例子定义了两个类:Person 和 Student,然后让 Student 类继承 Person 类。s = Student('Jack', 18) 表示实例化一个 Student 对象,我们看到 s 可以调用父类的 type 属性和 walk() 方法。

当然了,我们也可以让多个类继承同一个父类,请看下面示例。

示例 2:多个类继承同一个父类

# 定义父类
class Person:
    type = 'human'
    def walk(self):
        print('walking')

# 定义子类
class Student(Person):
    def __init__(self, name, age):
        self.name = name
        self.age = age
    def getname(self):
        print(self.name)

# 定义子类
class Teacher(Person):
    def __init__(self, name, course):
        self.name = name
        self.course = course
    def getname(self):
        print(self.name)

# Student 实例化
s = Student('Jack', 18)
print(s.type)
s.walk()

# Teacher 实例化
t = Teacher('Mr. Lincoln', 40)
print(t.type)
t.walk()

运行结果如下。

human
walking
human
walking

分析:

从结果可以看出,Student 和 Teacher 这两个类都继承了 Person 这个类,所以它们实例化出来的对象,都拥有 type 属性和 walk() 方法。

示例 3:使用 super() 调用父类构造函数

# 定义父类
class Person:
    def __init__(self, name):
        self.name = name
        self.type = 'human'
        
    def walk(self):
        print('walking')

# 定义子类,并继承父类
class Student(Person):
    def __init__(self, name, age):
        # 使用 super() 调用父类的构造函数
        super().__init__(name)
        # 定义子类特有的属性
        self.age = age
        
    def get_info(self):
        print(f'姓名:{self.name},年龄:{self.age},类型:{self.type}')

# 实例化对象
s = Student('Jack', 18)
s.get_info()

运行结果如下。

姓名:Jack,年龄:18,类型:human

分析:

在实际开发中,父类通常也有自己的 __init__() 方法。如果子类定义了自己的 __init__(),就会把父类的覆盖掉。为了既能保留父类的初始化逻辑,又能加上子类自己的逻辑,我们需要借助 super() 函数。

上一篇: Python 静态方法

下一篇: Python 元类

给站长反馈

绿叶网正在不断完善中,小伙伴们如果发现任何问题,还望多多给站长反馈,谢谢!

邮箱:lvyenet@vip.qq.com

「绿叶网」服务号
绿叶网服务号放大
关注服务号,微信也能看教程。
绿叶网服务号