Python 面向对象编程 二 继承和多继承
- 用继承扩展类
- 简单继承
- 多继承
用继承扩展类
OOP中的继承概念类似于现实世界中的继承,在现实世界中,孩子们在自己的特征之上继承了父母的一些特征。
同样,一个类可以从另一个类继承元素。这些元素包括属性和方法。我们从中继承另一个类的类通常被称为父类、超类或基类。我们从另一个类继承的类称为派生类、子类或子类。以下屏幕截图显示了父类和子类之间的简单关系:
在Python中,当一个类从另一个类继承时,它通常会继承组成父类的所有元素,但这可以通过使用命名约定(如双下划线)和访问修饰符来控制。
继承可以有两种类型:简单继承或多重继承。接下来我们会探讨这些内容。
简单继承
在简单继承或基本继承中,类是从单个父类派生的。这是面向对象编程中常用的继承形式,更接近人类的家谱。使用简单继承的父类和子类的语法如下所示:
class BaseClass:
<基类的方法和属性>
class ChildClass (BaseClass):
<子类的方法和属性>
对于这个简单的继承,我们将修改小汽车类
类的示例,使其从交通工具类
父类派生。我们还将添加一个大卡车
子类演示一下继承。以下是经过修改的代码:
class 交通工具:def __init__(我, 颜色):我.颜色 = 颜色def 输出_交通工具_信息(我):print(f"我是一个交通工具,我的颜色是{我.颜色}")class 小汽车(交通工具):def __init__(我, 颜色, 座位数量):我.颜色 = 颜色我.座位数量 = 座位数量def 输出_自己(我):print(f"我是一个小汽车,我的颜色是{我.颜色},我有{我.座位数量}个座位。")class 大卡车(交通工具):def __init__(我, 颜色, 载重量):我.颜色 = 颜色我.载重量 = 载重量def 输出_自己(我):print(f"我是一个大卡车,我的颜色是{我.颜色}, 我的载重量是{我.载重量}吨。")if __name__ == "__main__":小汽车 = 小汽车("黑色", 4)小汽车.输出_交通工具_信息()小汽车.输出_自己()大卡车 = 大卡车("蓝色", 10)大卡车.输出_交通工具_信息()大卡车.输出_自己()
下面是输出结果:
我是一个交通工具,我的颜色是黑色
我是一个小汽车,我的颜色是黑色,我有4个座位。
我是一个交通工具,我的颜色是蓝色
我是一个大卡车,我的颜色是蓝色, 我的载重量是10吨。
在这个例子中,我们创建了一个父类交通工具
,这个类有一个颜色
属性和一个输出_文通工具_信息
方法。这两个元素都是可以被继承的。接下来,我们给交通工具
类创建了两个子类小汽车类
和大卡车类
.小汽车类
添加了一个座位数量
属性和一个输出_自己
方法;大卡车类
添加了一个载重量
属性和一个输出_自己
方法。通过代码可以看出,我们可以在通过子类的实例访问父类的属性和方法。
这个例子演示了,继承对编写可复用代码来说是必要的。
多继承
Python 编程语言允许多继承。
在多继承中,子类可以从多个父类派生。多重继承的概念适用于高级面向对象设计,其中对象与多个对象有关系,但从多个类继承时必须小心,特别是如果这些类是从一个公共超类继承的。这可能会导致菱形问题等问题。菱形问题是一种情况,当我们通过从两个类Y
和Z
继承来创建X
类,而Y和Z类是从一个公共类A
继承的。X
类将对A
类的公共代码产生歧义,而A
类是从Y
和Z
类别继承的。由于可能带来的问题,不鼓励多重继承。
上图就是菱形继承。
为了说明这个概念,我们将修改交通工具类
类和小汽车类
类,并添加一个发动机类
类作为父类之一。下面的代码完整演了多继承:
class 交通工具类:def __init__(我, 颜色):我.颜色 = 颜色def 输出_交通工具_信息(我):print(f"我是一个交通工具,我的颜色是{我.颜色}。")class 发动机类:def __init__(我, 排量):我.排量 = 排量class 小汽车(交通工具类, 发动机类):def __init__(我, 颜色, 座位数量, 排量):我.颜色 = 颜色我.座位数量 = 座位数量我.排量 = 排量def 输出_自己(我):print(f"我是一个小汽车,我的颜色是{我.颜色},我有{我.座位数量}个座位,我的发机机排量是{我.排量}。")class 大卡车类(交通工具类, 发动机类):def __init__(我, 颜色, 载重量, 排量):我.颜色 = 颜色我.载重量 = 载重量我.排量 = 排量def 输出_自己(我):print(f"我是一个大卡车,我的颜色是{我.颜色}, 我的载重量是{我.载重量}吨,我的发动机排量是{我.排量}。")if __name__ == "__main__":小汽车 = 小汽车("黑色", 4, "2.5L")小汽车.输出_交通工具_信息()小汽车.输出_自己()大卡车 = 大卡车类("蓝色", 10, "10.0L")大卡车.输出_交通工具_信息()大卡车.输出_自己()
以上代码的输出结果是:
我是一个交通工具,我的颜色是黑色。
我是一个小汽车,我的颜色是黑色,我有4个座位,我的发机机排量是2.5L。
我是一个交通工具,我的颜色是蓝色。
我是一个大卡车,我的颜色是蓝色, 我的载重量是10吨,我的发动机排量是10.0L。
以上代码的类图是:
在这个多继承的例子中,小汽车类
和 大卡车类
都有两个父类 交通工具类
和 发动机类
。
<未完待续>