Python类和对象
(一) 面向过程和面向对象编程
面向过程就是分析出解决问题所需要的步骤,然后一步一步地实现。
面向对象是把构成问题事务分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描叙某个事物在整个解决问题的步骤中的行为。
例如,五子棋,面向过程的设计思路就是首先分析问题的步骤:
1、开始游戏,
2、黑子先走,
3、绘制画面,
4、判定输赢,
5、轮到白子,
6、绘制画面,
7、判定输赢,
8、返回步骤2,
9、输出最后结果。
把上面每个步骤用分别的函数来实现,问题就解决了。
而面向对象的设计则是从另外的思路来解决问题。整个五子棋可以分为:
1、黑白双方,这两方的行为是一模一样的,
2、棋盘系统,负责绘制画面,
3、规则系统,负责判定诸如犯规、输赢等。
第一类对象(玩家对象)负责接受用户输入,并告知第二类对象(棋盘对象)棋子布局的变化,棋盘对象接收到了棋子的变化就要负责在屏幕上面显示出这种变化,同时利用第三类对象(规则系统)来对棋局进行判定。
(二) 类和对象
在面向对象编程的基础之上,衍生出了类
和对象
的概念。类是对客观世界中事物得抽象,而对象是类实例化后的实体。例如,汽车模型就是一个类,制造出来的每辆汽车就是一个对象。
<1> 在Python中创建类
- python使用
class
关键字定义一个类,类名的首字母一般要大写,例如:
1 | class Person: |
- 类的主体由一系列的属性和方法组成,这里介绍类属性的操作。
- 增加类属性的两种方式
增加类属性的第一种方式为:先定义好类之后,在后面的代码中来增加。形式是:类.属性 = 值
1 | # 先定义一个类 |
增加类属性的第二种方式为:在定义类的过程中,定义属性。
1 | # 定义类和类属性 |
在实践过程中,第二种方式更加的常用,第一种方式在某些特定的编程情景中可能更加的方便。
- 通过del语句删除类属性
1 | # 例如我们要删除上面定义的Person类的age属性 |
- 通过赋值的方式修改类属性
1 | class Person: |
<2> 实例化对象
1 | # 先创建一个类 |
<3> 类和对象的内存存储
当创建一个类之后,会在计算机内存中开辟一个空间,用于存储类
,同时也会开辟出空间用于存储各个属性值。而所谓类.属性
则是记录的是指向属性值的指针信息。
当修改属性的值时,会在内存空间重新开辟一个空间,存储新的值。然后将指针指向该新的值。
<4> 类的方法
类的主体为方法和属性,而方法的定义有三种方式:1 实例方式、2 类方式、3 静态方式。
- 通过实例方式定义类方法
从下面的代码可以看到,方法是定义在类中的。另外,通过实例方式定义的方法,第一个参数是self
,这个参数指的是调用时候的实例,如下述代码中,该参数指的就是实例P
。
1 | # 首先定义类 |
- 通过类方式定义类方法
需要借助装饰器@classmethod
进行定义,在定义方法前面,需要申明装饰器。此外,注意到方法中第一个参数为cls
,即class的简写。它的含义为类,如下述代码中,cls的意义为Person
类。
这种方式,也可以在实例层次上调用类。如果实在实例层次上调用,默认会将实例所对应的类,作为 cls 参数的输入。
1 | # 定义类,通过类方式来定义类方法 |
- 通过静态方式定义类方法
需要借助装饰器@staticmethod
进行定义,在定义方法前面,需要申明装饰器。
1 | class Person: |
<5> 类方法的三种定义方式区别
通过实例方式定义的类方法,既可以调用类属性,也可以调用调用实例添加的实例属性,如Person.age
和P.num
都可以被这种方式调用。
类方式定义的方法,只可以调用类属性(Person.age),而不能调用实例属性(P.num)。
静态方法定义的方法,既不能调用类属性,也不能调用实例属性。
1 | # 首先定义一个类 |
(三) 类属性和方法的注释文档
<1> 代码中的格式
规则1:在定义类后的第一行
,使用三个双引号
来添加类注释信息。注释信息应包含该类的作用、构造函数等描述。
规则2:类属性的注释放在“规则1”部分,并用如 Attributes 关键字来标记。
规则3:在定义类方法的第一行
,使用三个双引号
来添加类方法注释信息。在PyCharm中,编写完成方法后,再添加注释信息,会自动化补全参数注释格式,如下面代码中的:param distance:
。
规则4:定义完类之后,可以使用help()
方法来查看注释信息。
1 | class Person: |
help()查看的注释信息如下:
1 | class Person(builtins.object) |
<2> 生成注释文档
在编写复杂的程序时,就会定义非常多的类。此时,使用help()方法是不可行的。我们就可以借助Python的标准模块pydoc
,以生成html格式的注释文件。
在上述代码文件目录下,打开终端,并输入下面的命令:
1 | python -m pydoc -b |
完成后,将在默认浏览器中开启一个网页,可以看到我们编写的类文件注释信息。
当然,也可以指定生成某个特定类文件的注释信息文件,如下。完成后将在该目录下产生一个html文件。
1 | python -m pydoc -w leiwenjian.py |
<3> 函数的注释
顺便提一下函数的注释规则,与类方法的注释规则很像,如下。
1 | def food(name): |
原文作者: Billy & Barney
原文链接: https://liangbilin.github.io/2019/11/01/Billy--Python类和对象/
版权声明: 转载请注明出处(必须保留作者署名及链接)