概念导入:单继承
现实生活中的继承:以 iPhone 6-8 为例,这些型号的手机外观相似,仅有部分变化,那么在设计图纸时,我们是从头开始设计一张新的呢?还是沿用上一代的图纸稍作修改(挤牙膏)呢?
很显然,后者更为合理,这便是继承。
基本语法:
1
2
3
4
5
6
7
|
class 第一代:
成员1
成员3
class 第二代(第一代):
新增成员1
新增成员2
|
QuickStart:
1
2
3
4
5
6
7
8
9
10
11
12
13
|
class e_car_v1: # 第一代新能源车
battery = None # 电池组
def power_recycle(self):
print('已启用动能回收')
class e_car_v2(e_car_v1): # 第二代新能源车
ai_computer = None # 智能车机
def autodrive(self):
print('已启用自动驾驶')
####测试####
car = e_car_v2()
car.power_recycle()
car.autodrive()
|
多继承
一个类也可以继承多个已存在的类,例如:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
class Phone:
IMEI = None # 序列号
producer = 'XiaoMi' # 厂商
def call_by_5g(self):
print('已启用5g通话')
class NFCReader:
version = 'v4.0'
def read_card(self):
print('读取卡片')
def write_card(self):
print('写入卡片')
class RemoteControl:
type = '红外遥控'
producer = 'retr0 Inc.'
def control():
print('红外遥控开启')
class MiPhone(Phone,NFCReader,RemoteControl):
pass
phone1 = MiPhone()
print(phone1.producer)
|
注:通过下方的测试可以看出虽然最终的MiPhone类中有两个producer成员,但是最终是以继承的第一个Phone类为准的,这说明继承时按照从左到右的顺序优先。
复写父类成员和调用父类成员
复写
前面我们学习了如何在父类已有的成员的基础上增加成员,但是如果我们对于之前的成员不满意要怎么修改呢?这就是复写的概念。
即:在子类中重新定义同名的属性或方法即可。
1
2
3
4
5
6
7
8
9
10
11
12
13
|
class e_car_v1: # 第一代新能源车
battery = 'v1.0' # 第一代电池组
def power_recycle(self):
print('已启用动能回收')
class e_car_v2(e_car_v1): # 第二代新能源车
battery = 'v2.0' # 第二代电池组
ai_computer = None # 智能车机
def autodrive(self):
print('已启用自动驾驶')
####测试####
car = e_car_v2()
print(e_car_v2.battery)
|
调用父类成员
一旦我们复写了父类成员,那么类对象调用成员的时候就会调用复写后的新成员
如果需要使用被复写的父类的成员,就需要特殊的调用方式:
方式一
使用成员变量:父类名.成员变量
使用成员方法:父类名.成员方法(self,示例参数)
方式二
- 使用super()调用父类成员(要将其写在子类的方法内,借助对象执行)
使用成员变量:super().成员变量
使用成员方法:super().成员方法()
Quickstart
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
class e_car_v1: # 第一代新能源车
battery = 'v1.0' # 第一代电池组
def power_recycle(self):
print('已启用动能回收')
class e_car_v2(e_car_v1): # 第二代新能源车
battery = 'v2.0' # 第二代电池组
ai_computer = None # 智能车机
def autodrive(self):
print('已启用自动驾驶')
def last_battery(self):
print(super().battery)
####测试####
car = e_car_v2()
print(e_car_v1.battery)
car.last_battery()
|