本节内容
- 多态
- 面向对象使用场景
- 知识点回顾
一、多态
一、概述
多态性(polymorphisn)是允许你将父对象设置成为和一个或更多的他的子对象相等的技术,赋值之后,父对象就可以根据当前赋值给它的子对象的特性以不同的方式运作。简单的说,就是一句话:允许将子类类型的指针赋值给父类类型的指针。
那么,多态的作用是什么呢?我们知道,封装可以隐藏实现细节,使得代码模块化;继承可以扩展已存在的代码模块(类);它们的目的都是为了——代码重用。而多态则是为了实现另一个目的——接口重用!多态的作用,就是为了类在继承和派生的时候,保证使用“家谱”中任一类的实例的某一属性时的正确调用。
很遗憾,在python不能直接的支持多态,所以我们只能间接的去执行
二、多态
其实就是用父类调用子类的方法,根据传入的子类的实例,得知具体调用哪个子类的方法,那在python中如何实现多态呢?代码如下:
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 |
|
小结:
- 多态在python中是不支持的
- 想要在python实现类似于Animal.talk(Dog("d1")),可以定义一个可以类方法的一个方法,调用时需要往这个方法传入类的实例
二、面向对象使用场景
一、概述
之前我们学了面向对象知识,那我们在什么时候用呢?不可能什么时候都需要用面向对象吧,除非你是纯的面向对象语言,好的,我们下面就来谈谈
二、知识回顾
2.1 什么是面向对象?
在学面向对象之前我们都是用:函数
面向对象编程其实就是:类 + 对象
2.2 什么是类,什么是对象,它们之前又有什么关系?
1 2 3 4 5 6 7 8 9 10 11 |
|
三、使用场景
3.1 提取公共功能
说明:我们把一些公共的功能,可以提取出来,并且在公共的功能中创建属于这个对象的属性,然后其他的方法就可以使用这个对象的属性了
我们举一个远程上传,执行命令的例子,例子代码如下:
1 2 3 4 5 6 7 8 9 |
|
从上面可以看出,连接服务器和关闭服务时属于公共的功能,我们用面向对象实现如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
|
3.2 根据一个模板去创建某些东西
说明:我们用面向对象,其实就是建立一个模板,比如说见一个person类,通过这个person类去实例化很多对象,子类继承它的时候,也可以重用一些属性和方法,这里就不多说了
3.3 多个函数传入共同参数
说明:当很多的函数需要有公共的参数时,可以吧参数提取出来,封装到对象中,便于以后方便使用
比如说,我们有很多的函数,需要用公共的参数,代码如下:
1 2 3 4 5 6 7 8 |
|
上面三个函数都用到了host、port、pwd、arg这四个参数,那我们就可以封装到对象中,代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
|
总结:
- 我们把一些公共的功能,可以提取出来,并且在公共的功能中创建属于这个对象的属性,然后其他的方法就可以使用这个对象的属性了
- 根据一个模板去创建某些东西
- 多个函数传入共同参数
三、知识点回顾
一、self关键字
作用:调用当前方法的对象
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
|
注意:country = "中国" 属于公有字段,它的作用是:每个对象中保存相同的东西时,可以使用静态字段
二、封装
- 类中封装了 :字段、方法
- 对象中封装了:普通字段的值
- 不仅可以封装字段,还可以封装对象
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 |
|
三、继承
说明:子类继承父类,对象调用方法时,先从自己的类中去找,找不到,就会去找父类中的方法。
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 |
|
上面代码访问的顺序如下:
- 先去到F3中找a1方法,没有找到
- 到F2父类去找,找到了a1方法,去执行a1方法
- 执行过程中需要调用F3中的a2方法
四、静态方法
4.1 类的组成
- 字段:1.普通字段(保存在对象中),2静态字段(保存在类中)
- 方法:普通方法(保存在类中,用对象去调用)
1 2 3 4 5 6 7 |
|
4.2 静态方法
特点:
- 保存在类中
- 调用者无需创建对象
- 可以有任意个参数
1 2 3 4 5 6 7 8 |
|
作用:当对象不需要传入参数时,去创建对象有些浪费,占着资源,所以还不如直接用类名直接去调用,这个类似于函数。