Python程序设计 第7章:Python面向对象编程
本章学习目标:
- 了解面向对象编程思想的由来
- 掌握类的声明和创建方法
- 掌握对象的创建和使用方法
- 掌握类的属性和方法定义方法
- 了解内部类和魔术方法的基本概念
- 掌握常见的三种类间关系
本章思维导图

7.1 面向对象编程概述
根据代码组织方式的不同,编程语言可以分为以下两种。
面向过程语言:面向过程就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候再依次调用,类似流水线的工作原理。面向对象语言:面向对象是把构成问题事务分解成各个对象,依靠各个对象之间的交互推动程序执行,进而实现问题的解决。建立对象的目的不是为了完成一个步骤,而是为了描叙某个事物在完整解决问题步骤中的行为。
7.1.1 OOP的产生
面向对象其产生的原因主要有以下两点:
- 面向过程的编程机制无法解决复杂程序的可维护性和可扩展性问题。
- 面向过程的编程机制背离了人们观察和解决问题的基本思路。
简言之,面向过程的编程是根据业务逻辑从上到下写代码,典型如C语言等;
面向对象的编程是对变量和函数进行分类和封装,让开发“更快更好更强”,典型如C++、Java、C#等。对这两种编程机制,Python均提供了良好支持。
总体而言,Python更偏向于成为面向对象编程的编程语言。
7.1.2 OOP核心思想
面向对象编程的核心思想是把构成问题的各个事物分解成能够完整描述该实体功能的封装类,并通过对象的交互完成问题的解决。
对象作为程序的基本单位,将程序和数据封装于其中,以提高程序的重用性、灵活性和可扩展性。类是创建对象的模板,而对象是类的实例化。一个类可以创建多个对象。

- 类 :是对实体的抽象,是泛指,比如:动物、植物等。
- 对象:是类的一个实例,是特例,比如:猫、狗等。
例如:动物可以对猫的特征和行为进行抽象,然后可以实例化为真实的动物实体。

在采用面向对象思想编程时,可依次采用以下步骤:
7.1.3 OOP特征
7.2 类和对象
7.2.1 类的创建
类、属性和方法的命名约定惯例如下:
类名表示实例的抽象,命名时首字母大写;属性使用名词作为名字,比如name、age、weight等;方法名一般指对属性的操作,其命名规则一般采用动词加属性名称形式,如updataName、updataAge、updataWeight等。 举例如下图:

在Python3.x中,如果没有显示指明要继承的父类,则默认继承object类。

Python3.x中,无需继承时,例子中三种类的创建效果一样。自动继承object类。
新式类添加了一些内置属性和方法,如下所示:
__name__ :属性的名字 __doc__ :属性的文档字符串 __get__(object) :获取对象属性值的方法 __set__(object, value) :设置对象属性值的方法 __delete__(object, value) :删除对象属性的方法
7.2.2 对象的创建
7.2.3 类的属性
类的定义由属性和方法组成,属性是对数据的封装,方法则是对类行为的封装。属性按使用范围分为公有属性和私有属性,使用范围取决于属性名称。类的属性如下表所示。

内置属性如下表所示:


7.2.4 类的方法
7.2.5 内部类
7.2.6 魔术方法
在Python语言中,所有以双下划线“__”包起来的方法,都统称为“魔术方法”。 这些方法在实例化时会自动调用, 比如“_str__()”、“__init__()”、“__del__()”等。 使用魔术方法可以构造出非常优美的代码,比如将复杂的逻辑封装成简单的API等。
魔术方法中的“__init__()”方法一般叫做构造函数,用于初始化类的内部状态和参数。 如果不提供,Python语言会给出一个默认的“__init__()”方法 魔术方法中的“__ del __()”函数叫做析构函数,用于释放对象占用的资源。“__del__()”函数是可选的, 如果不提供,Python语言会在后台提供默认析构函数。 魔术方法中,有些可以实现属性访问控制的功能,如“__getattr__(self,name)”, “__setattr__(self,name,value)”方法等。
7.3 类间关系
7.3.1 依赖关系
7.3.2 关联关系
7.3.3 继承关系
在Python语言中使用继承机制时,有以下几点需要注意:
(1)子类拥有父类的属性和方法。 (2)子类可以创建自己属性和方法。 (3)子类可以对父类的方法进行覆盖实现。 (4)子类可重新定义父类中的属性。 (5)一个父类可由多个子类继承,一个子类也可继承多个父类。 (6)如果父类定义了__init__()方法,子类也定义了自己的__init__()方法并且还要使用父类的__init__()方法, 子类需要显式调用父类的__init__()方法。如果子类需要扩展父类的初始化行为,可以添加__init__()方法参数。 (7)当继承的多个父类中有相同的属性或方法时,会使用最后一个继承父类的属性或方法。
7.4 总结
- 通过介绍面向对象的产生由来和核心思想,使初学者认识面向对象编程的基本概念。
- 通过介绍Python语言中类和对象定义和使用的基本概念、流程,使得开发者了解Python语言中面向对象编程的基本流程,并初步掌握面向对象编程的方法。
- 介绍了Python语言面向对象编程时类之间关系的相关知识,包括依赖关系、关联关系、继承关系等。
7.5 每日分享
什么叫做心外无物
我给出的例子就是:你拿1万元现金和一把香蕉放在一个猴子面前,它会毫不犹豫的选择香蕉,因为它知道香蕉可以吃,但不知道1万块钱能买很多香蕉,在猴子看来,那一打钱什么都不是,这就是心外无物。
我见识了一个学生的为了掩盖自己见不得光的行为,撒了无数的谎话,在ta看来撒谎根本就不是事,为什么呢?因为ta心里没有礼义廉耻,所以ta并不会因为撒谎而羞愧。
发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/209367.html原文链接:https://javaforall.net
