初识面向对象-python
Python 面向对象
一、概念的区分:
- 面向过程:根据业务逻辑从上到下写垒代码
- 函数式:将某功能代码封装到函数中,日后便无需重复编写,仅调用函数即可
- 面向对象:对函数进行分类和封装,让开发“更快更好更强…”
二、面向对象编程(Object Oriented Programming,OOP,面向对象程序设计)
面向对象编程是一种编程方式,此编程方式的落地需要使用 “类” 和 “对象” 来实现,所以,面向对象编程其实就是对 “类” 和 “对象” 的使用。
类就是一个模板,模板里可以包含多个函数,函数里实现一些功能
对象则是根据模板创建的实例,通过实例对象可以执行类中的函数
书写规范:
class 类名(object):
#定义构造函数
def __init__(self):
pass
#定义方法(函数)
def sayHi(self):
print("hello")
- class是关键字,表示类
- 创建对象,类名称后加括号即可
- 类中的函数第一个参数必须是self
- 类中定义的函数叫做方法
三、函数
__init__()方法
__init__()是一个特殊方法(special method)。Python里会有一些特殊方法,Python会以特别的方式处理它们。特殊方法的名字的特点是前后都有两个下划线。
__init__()方法的特殊在于,如果你在类中定义了这个方法,一旦你根据这个类建立对象,Python就会自动调用这个方法(这个过程也叫初始化)。
面向对象三大特性
面向对象的三大特性是指:封装、继承和多态。
一、封装
封装,顾名思义就是将内容封装到某个地方,以后再去调用被封装在某处的内容。
所以,在使用面向对象的封装特性时,需要:
- 将内容封装到某处
- 从某处调用被封装的内容
第一步:将内容封装到某处
第二步:从某处调用被封装的内容
调用被封装的内容时,有两种情况
- 通过对象直接调用
- 通过self间接调用
1、通过对象直接调用被封装的内容
2、通过self间接调用被封装的内容
综上所述,对于面向对象的封装来说,其实就是使用构造方法将内容封装到 对象 中,然后通过对象直接或者self间接获取被封装的内容。
二、继承
继承,面向对象中的继承和现实生活中的继承相同,即:子可以继承父的内容。
例如:
猫可以:喵喵叫、吃、喝、拉、撒
狗可以:汪汪叫、吃、喝、拉、撒
如果我们要分别为猫和狗创建一个类,那么就需要为 猫 和 狗 实现他们所有的功能
动物:吃、喝、拉、撒
猫:喵喵叫(猫继承动物的功能)
狗:汪汪叫(狗继承动物的功能)
所以,对于面向对象的继承来说,其实就是将多个类共有的方法提取到父类中,子类仅需继承父类而不必一一实现每个方法。
注:除了子类和父类的称谓,你可能看到过 派生类 和 基类 ,他们与子类和父类只是叫法不同而已。
- 是否可以继承多个类
- 如果继承的多个类每个类中都定了相同的函数,那么那一个会被使用呢?
1、Python的类可以继承多个类,Java和C#中则只能继承一个类
2、Python的类如果继承了多个类,那么其寻找方法的方式有两种,分别是:深度优先和广度优先
- 当类是经典类时,多继承情况下,会按照深度优先方式查找
- 当类是新式类时,多继承情况下,会按照广度优先方式查找
经典类和新式类,从字面上可以看出一个老一个新,新的必然包含了跟多的功能,也是之后推荐的写法,从写法上区分的话,如果 当前类或者父类继承了object类,那么该类便是新式类,否则便是经典类。
三、多态
Pyhon不支持多态并且也用不到多态,多态的概念是应用于Java和C#这一类强类型语言中,而Python崇尚“鸭子类型”。
关于Python的多态,就像JavaScript一样,直接访问对象的属性,不需要使用接口,没有类型转换。
对于类型的判断,有抓们的type()函数,和isinstance()函数判断是否某个函数的子类。
总结
以上就是本节对于面向对象初级知识的介绍,总结如下:
- 面向对象是一种编程方式,此编程方式的实现是基于对 类 和 对象 的使用
- 类 是一个模板,模板中包装了多个“函数”供使用
- 对象,根据模板创建的实例(即:对象),实例用于调用被包装在类中的函数
- 面向对象三大特性:封装、继承和多态
最新文章
- SQL Server SQL性能优化之--通过拆分SQL提高执行效率,以及性能高低背后的原因
- Java笔记:Number
- ros科大讯飞语音识别
- 开启MySQL慢查询日志
- Backbone Events 源码笔记
- (step4.3.4)hdu 1258(Sum It Up——DFS)
- 我的接口框架---框架函数文件common.php
- Android--------解决ScrollView中嵌套ExpandableListView显示不全的问题
- kali2.0 + LAMP
- mysql commit 和 rollback
- building tool
- Python两步实现关联规则Apriori算法,参考机器学习实战,包括频繁项集的构建以及关联规则的挖掘
- NodeJs之fs
- android 开发 更好的数据存放,回调,处理class模式,适合与各种布局适配器class一起使用
- hadoop系列 第二坑: hive hbase关联表问题
- crm的知识点整理
- k8s API sample
- hibernate 工作原理及为什么要用
- Java第三阶段学习(十三、会话技术、Cookie技术与Session技术)
- SQL Server数据库——数据库的数据导出与数据导入
热门文章
- 2017.12.25 Java中面向对象思想的深刻理解
- convert命令
- 如果int x=20, y=5,则语句System.out.println(x+y +";";+(x+y)+y); 的输出结果是()
- pandas 代码
- detection in video and image
- 切换Ubuntu超级管理员
- git常用命令以及速查命令
- 自定义配置Webpack和Babel配置
- RSA等非对称加密为什么要用公钥加密,而用私钥解密?
- elasticsearch 7 安装