Python 封装、继承、多态
MarkLin 2020-12-30 Python
# Python 封装、继承、多态
# 封装:
# 封装一个类:计算矩形的面积和周长
class Rectangle:
# 一个矩形必备的属性: 长和宽
def __init__(self, length, width):
self.length = length
self.width = width
print("构造方法__init__ 初始化时自动调用,用户初始化赋值")
# 利用属性 计算出面积
def area(self):
# 方法使用了self ; 读取当前对象的属性 --对象方法
return self.width*self.length
# 周长
def perimeter(self):
return (self.width+self.length)*2
r1 = Rectangle(20, 10)
# 对象方法: 利用对象已有的属性 可以计算得到额外的内容
print(r1.area()) # 200
print(r1.perimeter()) # 60
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# 封装一个类:计算立方体的体积、面积、周长
class Cube:
# 初始化方法:三个参数 长/宽/高
def __init__(self, l, w, h):
self.l = l
self.w = w
self.h = h
# 计算体积
def volume(self):
return self.l*self.w*self.h
# 计算面积
def area(self):
return (self.l * self.w + self.l * self.h + self.w * self.h)*2
# 计算周长
def perimeter(self):
return (self.l+self.w+self.h)*4
c1 = Cube(10, 5, 2)
print(c1.volume()) #100
print(c1.area()) #160
print(c1.perimeter()) #68
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# 继承:
# 继承 :让类具有极高的 可扩展性
class Person:
def __init__(self, name, age, sex):
self.name = name
self.age = age
self.sex = sex
# 继承: 子类继承父类,就会具有父类的所有内容, 并 额外进行扩充
# JS: class Son extends Father
class Student(Person):
# 扩充:
def study(self):
print(self.name, "开始学习")
xinxin = Student('小明', 38, '男')
xinxin.study() #小明 开始学习
class Teacher(Person):
def teach(self):
print(self.name, '开始健身了')
dong = Teacher('小李', 33, '男')
dong.teach() #小李 开始健身了
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
26
27
28
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
# 多态(重写)
# 子类继承父类, 就会具备父类的方法和属性; 但是可以修改
class Person:
def __init__(self, name, age, sex):
self.name = name
self.age = age
self.sex = sex
def show(self):
print('我是Person的show()')
class Son(Person):
# 扩展父类的方法: 例如构造:
def __init__(self, name, age, sex, phone):
# 原有的属性 依然利用父类的 __init__ 来初始化
# 此处不能写self, 因为self代表自己, 即子类
super().__init__(name, age, sex)
self.phone = phone
# 父类中有 show() 方法, 子类中重新写了一个相同的方法
def show(self):
print('我是Son的show()')
# 重写:不是覆盖关系 而是 优先级关系
# 优先调用自身重写的方法
# 调用父类中的方法, 则需要关键词 super()
super().show()
s = Son('小马', 33, '男', '10086')
s.show()
print(s.phone)
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
26
27
28
29
30
31
32
33
34
35
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35