Python 进阶 — 面向对象编程
Posted 范桂飓
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python 进阶 — 面向对象编程相关的知识,希望对你有一定的参考价值。
目录
文章目录
面向对象思想
面向对象不仅是一种编程思想,更是解决问题和处理数据的方式,面向对象是一种对现实世界的理解和抽象的方法。
以面向对象思想为基础发展而来的技术主要有:
- OOA(Object Oriented Analysis,面向对象的分析)
- OOD(Object Oriented Design,面向对象的设计)
- OOP(Object Oriented Programming,面向对象的编程实现)
面向对象编程
面向对象编程,又称为面向对象的程序设计,简称 OOP,本质是一种程序设计的范型,也是计算机编程技术发展到一定阶段后的产物。
在客观世界中,对象是人们要进行研究的任何 “事” 或 “物”,例如:某些规则、计划或事件等等概念上的 “事”,以及某些动物、汽车或书籍等等实际上的 “物”。
在数字世界中,对象(Object)实现了数据和操作的结合,使数据和操作封装到对象的统一个体中。主要具有两个特征:
- 对象状态:通过某些 “数据” 来描述一个对像的状态。
- 对象行为:通过某些 “操作” 来改变一个对象的状态。
同样在数字世界中,类(Class)则是对具有相同状态(数据)和行为(操作)的对象的抽象。
- 类属性:是对象状态的抽象,用数据结构来描述。
- 类方法:是对象行为的抽象,用实现特定操作的方法来描述。
因此,在很多 OOP 编程语言中,对象的抽象就是类,类的实例(具体)化就是对象。抽象指将具有一致的 “状态” 和 “行为” 的某种对象,抽象为具有统一 “属性” 和 “方法” 的类。类的抽象划分往往是主观的,应该要反映与程序应用相关的重要性质,而忽略其他一些无关的内容。
简而言之,OOP 是以 “数据” 和 “操作” 为中心的,通过数据结构设计来组织数据,并提供对此类数据所允许的操作。计算机程序的本质就是 “数据结构 + 算法”。
面向对象编程的特性
封装
封装,顾名思义是 “封闭性的包装”,其目的是将 “数据” 以及 “行为” 进行适度的隐藏,通过 “接口” 的方式进行暴露,使的代码逻辑模块化(松耦合、高内聚)。具体地说,在类的定义和实现时,需要为数据提供相应的接口,以免 Client 对数据进行不规范的操作。
被封装好的每个类都是独立的,由类所实例化得到的任何对象也都具有唯一性。OOP 中的对象都应该能够接受数据、处理数据、传达数据给其他的对象。并且对象之间只能够通过 “消息” 来进行通信。在对象的操作中,当一个消息发送给某个接收对象时,消息应该包含了该接收对象去执行某种操作的数据。
可见,封装能够实现:类的属性和方法能够只让可信的类或者对象进行操作,对不可信的操作进行信息隐藏。为类和对象中的属性、方法提供了安全的保障。具体的说,在一个对象内部,某些数据或行为可以是 Private(私有的),它们不能被外界访问。
换言之,一个类就是一个封装了数据以及操作这些数据的方法的逻辑实体。OOP 通过类和对象的封装技术以及消息机制,使得编程可以像搭积木的一样快速开发出一个全新的系统。
继承
继承使得不同的类之间拥有了一定的结构与关系。
继承是一种子类自动继承父类属性和方法的机制,在定义和实现一个子类的时候,可以在一个已经定义好的夫类的基础之上进行,加入若干新的内容,这些都不会影响到父类。所以,继承所带来的最明显的好处在于代码的可重用性。
继承的实现方式大致上有 2 大类、4 小类:
- Inheritance(继承),又名 “单重继承”:子类只继承一个父类的属性和方法。
- 实现继承:子类的属性和方法完全继承于父类。
- 可视继承:子类继承了父类的外观和方法。
- Composition(组合),又名 “多重继承”:子类继承了多个父类的属性和方法。
- 接口继承:子类的属性命和方法名继承于父类,但是具体的属性值和方法实现由子类重写。
- 纯虚类
注意,在实现多重继承时,如果继承的多个父类中均有名称相同的属性或方法时,要注意继承的顺序。
多态
多态指对于相同的类方法或函数,可作用于多种类型的对象上,并获得不同的结果,即:在不同的对象中可以拥有相同名称的属性或方法,但是属性值或方法实现却各不相同。也就是说,多种类型的对象都可以使用同一个类方法或函数,并且可以得到相应且不同的结果。这种现象称为多态性。
多态使得不同的对象能够通过它们共同的属性和方法来进行操作,而不需考虑它们具体的类型是否相同,继而使得动态绑定(运行时)成为了可能,允许重载及运行时类型确定。
多态常用于 “接口重用” 场景,保证了在类发生继承时,仍然能够正确的调用这些相关类的实例化对象的属性和方法。
面向对象编程的优势
- 以人更容易理解的方式对复杂的系统进行分析和设计。
- 降低开发难度:模块之间、组件之间、系统之间通过 API 来进行交互,以此屏蔽底层复杂性。
- 提高代码重用性:继承和多态提供了极高的代码重用性。
- 提到软件架构的可扩展性:松耦合的模块化设计,对单一模块的修改并不会影响到整合系统。
以上是关于Python 进阶 — 面向对象编程的主要内容,如果未能解决你的问题,请参考以下文章