S1.7 继承

概念导入:单继承

现实生活中的继承:以 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()	
Licensed under CC BY-NC-SA 4.0
已存在于互联网
发表了126篇文章 · 总计210.25k字
萌ICP备20267077号
Powered by ctOS