学习PYTHON之路, DAY 7

时间:2022-12-31 12:53:21

面向对象三大特性

一、封装

封装,顾名思义就是将内容封装到某个地方,以后再去调用被封装在某处的内容。

所以,在使用面向对象的封装特性时,需要:

  • 将内容封装到某处

  • 从某处调用被封装的内容

 

第一步:将内容封装到某处

学习PYTHON之路, DAY 7

 self 是一个形式参数,当执行 obj1 = Foo('wupeiqi', 18 ) 时,self 等于 obj1

                              当执行 obj2 = Foo('alex', 78 ) 时,self 等于 obj2

所以,内容其实被封装到了对象 obj1 和 obj2 中,每个对象中都有 name 和 age 属性,在内存里类似于下图来保存。

学习PYTHON之路, DAY 7

第二步:从某处调用被封装的内容

调用被封装的内容时,有两种情况:

  • 通过对象直接调用
  • 通过self间接调用

二、继承

继承,面向对象中的继承和现实生活中的继承相同,即:子可以继承父的内容。

对于面向对象的继承来说,其实就是将多个类共有的方法提取到父类中,子类仅需继承父类而不必一一实现每个方法。

多继承

  • 是否可以继承多个类
  • 如果继承的多个类每个类中都定了相同的函数,那么那一个会被使用呢?

 

1、Python的类可以继承多个类,Java和C#中则只能继承一个类

 

2、Python的类如果继承了多个类,那么其寻找方法的方式有两种,分别是:深度优先广度优先

 

学习PYTHON之路, DAY 7

 

  • 当类是经典类时,多继承情况下,会按照深度优先方式查找
  • 当类是新式类时,多继承情况下,会按照广度优先方式查找

 

经典类和新式类,从字面上可以看出一个老一个新,新的必然包含了跟多的功能,也是之后推荐的写法,从写法上区分的话,如果 当前类或者父类继承了object类,那么该类便是新式类,否则便是经典类。

 

学习PYTHON之路, DAY 7 学习PYTHON之路, DAY 7

 

 

学习PYTHON之路, DAY 7学习PYTHON之路, DAY 7
 1 class D:
2
3 def bar(self):
4 print 'D.bar'
5
6
7 class C(D):
8
9 def bar(self):
10 print 'C.bar'
11
12
13 class B(D):
14
15 def bar(self):
16 print 'B.bar'
17
18
19 class A(B, C):
20
21 def bar(self):
22 print 'A.bar'
23
24 a = A()
25 # 执行bar方法时
26 # 首先去A类中查找,如果A类中没有,则继续去B类中找,如果B类中么有,则继续去D类中找,如果D类中么有,则继续去C类中找,如果还是未找到,则报错
27 # 所以,查找顺序:A --> B --> D --> C
28 # 在上述查找bar方法的过程中,一旦找到,则寻找过程立即中断,便不会再继续找了
29 a.bar()
30
31 经典类多继承
经典类多继承

 

学习PYTHON之路, DAY 7学习PYTHON之路, DAY 7
 1 class D(object):
2
3 def bar(self):
4 print 'D.bar'
5
6
7 class C(D):
8
9 def bar(self):
10 print 'C.bar'
11
12
13 class B(D):
14
15 def bar(self):
16 print 'B.bar'
17
18
19 class A(B, C):
20
21 def bar(self):
22 print 'A.bar'
23
24 a = A()
25 # 执行bar方法时
26 # 首先去A类中查找,如果A类中没有,则继续去B类中找,如果B类中么有,则继续去C类中找,如果C类中么有,则继续去D类中找,如果还是未找到,则报错
27 # 所以,查找顺序:A --> B --> C --> D
28 # 在上述查找bar方法的过程中,一旦找到,则寻找过程立即中断,便不会再继续找了
29 a.bar()
30
31 新式类多继承
新式类多继承

经典类:首先去A类中查找,如果A类中没有,则继续去B类中找,如果B类中么有,则继续去D类中找,如果D类中么有,则继续去C类中找,如果还是未找到,则报错

新式类:首先去A类中查找,如果A类中没有,则继续去B类中找,如果B类中么有,则继续去C类中找,如果C类中么有,则继续去D类中找,如果还是未找到,则报错

注意:在上述查找过程中,一旦找到,则寻找过程立即中断,便不会再继续找了

3 继承的顺序

 

 学习PYTHON之路, DAY 7