目录

Python学习之路-初识面向对象

简介

面向对象编程(英语:Object-oriented programming,缩写:OOP)是种具有对象概念的编程典范,同时也是一种程序开发的抽象方针。它将对象作为程序的基本单元,将程序和数据封装其中,以提高软件的重用性、灵活性和扩展性,对象里的程序可以访问及经常修改对象相关连的数据。在面向对象程序编程里,计算机程序会被设计成彼此相关的对象。

我们之前学习的编程方式就是面向过程的,面相过程和面相对象,是两种不同的编程方式,对比面向过程的特点,可以更好地了解什么是面向对象。

特点

面向过程

  • 注重步骤与过程,不注重职责分工

  • 如果需求复杂,代码会变得很复杂

  • 开发复杂项目,没有固定的套路,开发难度很大!

面向对象

  • 注重对象和职责,不同的对象承担不同的职责
  • 更加适合应对复杂的需求变化,是专门应对复杂项目开发,提供的固定套路
  • 需要在面向过程基础上,再学习一些面向对象的语法
提示
相比较函数,类是更大的封装,根据职责在一个对象中封装多个方法。在完成某一个需求前,首先确定职责要做的事情(方法),根据职责确定不同的对象,在对象内部封装不同的方法(多个)。最后完成的代码,就是顺序地让不同的对象调用不同的方法

类和对象

简介

类是对一群具有相同特征或者行为的事物的一个统称,是抽象的,不能直接使用。特征被称为属性,行为被称为方法。

对象是由类创建出来的一个具体存在,可以直接使用。由哪一个类创建出来的对象,就拥有在哪一个类中定义的属性和方法。

关系

类是模板,对象是根据类这个模板创建出来的,应该先有类,再有对象。类只有一个,而对象可以有很多个。不同的对象之间属性可能会各不相同。类中定义了什么属性和方法,对象中就有什么属性和方法,不可能多,也不可能少。

类的设计

在使用面相对象开发前,应该首先分析需求,确定一下,程序中需要包含哪些类!

在程序开发中,要设计一个类,通常需要满足一下三个要素:

  • 类名这类事物的名字,满足大驼峰命名法
  • 属性这类事物具有什么样的特征
  • 方法这类事物具有什么样的行为
提示
大驼峰命名法:每一个单词的首字母大写且单词与单词之间没有下划线,如ClassName

类名

名词提炼法分析整个业务流程,出现的名词,通常就是找到的类

属性和方法

  • 对对象的特征描述,通常可以定义成属性
  • 对象具有的行为(动词),通常可以定义成方法
提示
需求中没有涉及的属性或者方法在设计类时,不需要考虑

基础语法

定义简单的类

定义一个只包含方法的类语法格式如下:

1
2
3
4
5
6
7
class 类名:

    def 方法1(self, 参数列表):
        pass
    
    def 方法2(self, 参数列表):
        pass
提示
方法的定义格式和之前学习过的函数几乎一样,区别在于第一个参数必须是self,暂时先记住,稍后介绍 self

创建对象

当一个类定义完成之后,要使用这个类来创建对象,语法格式如下:

1
对象变量 = 类名()

方法中的 self 参数

由哪一个对象调用的方法,方法内的 self 就是哪一个对象的引用

提示
在面向对象开发中,引用的概念是同样适用的。使用类创建对象之后,对象的变量中仍然记录的是对象在内存中的地址,也就是对象的变量引用了新建的类对象。使用 print 输出对象变量,默认情况下,是能够输出这个变量引用的对象是由哪一个类创建的对象,以及在内存中的地址(十六进制表示)

在类封装的方法内部,self 就表示当前调用方法的对象自己。调用方法时,程序员不需要传递self参数。

在方法内部,可以通过 self. 访问对象的属性,也可以通过 self. 调用其他的对象方法。

在类的外部,通过 变量名. 访问对象的属性和方法,在类封装的方法中,通过 self. 访问对象的属性和方法。

初始化方法

当使用 类名() 创建对象时,会自动执行以下操作:

  1. 为对象在内存中分配空间 —— 创建对象
  2. 为对象的属性设置初始值 —— 初始化方法(init)
提示
初始化方法就是 __init__ 方法,__init__ 是对象的内置方法,__init__ 方法是 专门用来定义一个类具有哪些属性的方法

__init__ 方法内部使用 self.属性名 = 属性的初始值 就可以定义属性,定义属性之后,再使用类创建的对象,都会拥有该属性。

内置方法和属性

__del__方法

当使用 类名() 创建对象时,为对象分配完空间后,自动调用 __init__ 方法,当一个对象被从内存中销毁前,会自动调用 __del__ 方法。

提示
__init__ 改造初始化方法,可以让创建对象更加灵活,__del__ 如果希望在对象被销毁前,再做一些事情,可以考虑一下 __del__ 方法
提示
对象的生命周期,一个对象从调用 类名() 创建,生命周期开始,一个对象的 __del__ 方法一旦被调用,生命周期结束,在对象的生命周期内,可以访问对象属性,或者让对象调用方法。

__str__方法

如果在开发中,希望使用 print 输出对象变量时,能够打印自定义的内容,就可以利用__str__这个内置方法了

提示
__str__ 方法必须返回一个字符串