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()函数判断是否某个函数的子类。

总结

以上就是本节对于面向对象初级知识的介绍,总结如下:

  • 面向对象是一种编程方式,此编程方式的实现是基于对  和 对象 的使用
  • 类 是一个模板,模板中包装了多个“函数”供使用
  • 对象,根据模板创建的实例(即:对象),实例用于调用被包装在类中的函数
  • 面向对象三大特性:封装、继承和多态

最新文章

  1. SQL Server SQL性能优化之--通过拆分SQL提高执行效率,以及性能高低背后的原因
  2. Java笔记:Number
  3. ros科大讯飞语音识别
  4. 开启MySQL慢查询日志
  5. Backbone Events 源码笔记
  6. (step4.3.4)hdu 1258(Sum It Up——DFS)
  7. 我的接口框架---框架函数文件common.php
  8. Android--------解决ScrollView中嵌套ExpandableListView显示不全的问题
  9. kali2.0 + LAMP
  10. mysql commit 和 rollback
  11. building tool
  12. Python两步实现关联规则Apriori算法,参考机器学习实战,包括频繁项集的构建以及关联规则的挖掘
  13. NodeJs之fs
  14. android 开发 更好的数据存放,回调,处理class模式,适合与各种布局适配器class一起使用
  15. hadoop系列 第二坑: hive hbase关联表问题
  16. crm的知识点整理
  17. k8s API sample
  18. hibernate 工作原理及为什么要用
  19. Java第三阶段学习(十三、会话技术、Cookie技术与Session技术)
  20. SQL Server数据库——数据库的数据导出与数据导入

热门文章

  1. 2017.12.25 Java中面向对象思想的深刻理解
  2. convert命令
  3. 如果int x=20, y=5,则语句System.out.println(x+y +""+(x+y)+y); 的输出结果是()
  4. pandas 代码
  5. detection in video and image
  6. 切换Ubuntu超级管理员
  7. git常用命令以及速查命令
  8. 自定义配置Webpack和Babel配置
  9. RSA等非对称加密为什么要用公钥加密,而用私钥解密?
  10. elasticsearch 7 安装