【懒懒的Python学习笔记八】

面向对象编程是最有效的编程方法之一,在面向对象编程中,你编写表示现实世界中事物和情景的类,并基于这些类来创建对象。使用类来创建对象被称为实例化

创建和使用类

使用类可以模拟任何东西。下面的实例编写一个表示小狗的的简单类Dog——它表示的布设某个特定的小狗,而是任何小狗,编写这个类后,我们将使用它来创建表示任何特定的小狗的实例。

创建类

根据Dog类创建的每个实例都将存储名字和年龄,我们赋予每条小狗蹲下(sit())和打滚(roll_over())的能力。

【懒懒的Python学习笔记八】

这里有很多地方需要注意,首先使用Class关键字定义类,在Python中首字母大写的名称一般是类,其次在类名Dog()的括号中包括Object,实际上在新版的Python 3中括号内不需要添加任何内容。

1、方法__init()__

类中的函数称为方法。前面所学的任何关于函数的一切都适用于方法,但是在调用方法上有所不同。__init()__方法是一个特殊的方法,每当你使用类创建一个实例的时候Python都会自动运行它。这个方法名称中,开头和末尾各有两个下划线,这是一种约束,旨在避免Python默认方法与普通方法产生冲突

方法__init()__定义包含三个参数:self、name和age。在这个方法的定义中,形参self是必不可少的,并且必须在其他形参前面。当我们Python调用__init()__来创建实例的时候会自动传入self这个参数,self参数是一个指向实例本身的引用,为的是让实例访问类中的属性和方法。需要注意的是我们在使用类创建实例的时候不需要传递self参数,在上个实例中只需要后两个形参(name和age)。

__init()__方法函数体内定义的变量都有self前缀,以self为前缀的变量可以供类的所有方法使用。语句self.name=name是将形参中name的值存储到类的变量name中。像这种可以通过实例访问的变量称为属性。

实际上在类中定义的函数都带有self这个形参。

2、创建实例

下面我们创建一个小狗的实例:

【懒懒的Python学习笔记八】


【懒懒的Python学习笔记八】

要访问实例的属性,可使用句点表示法。句点表示法在Python中很常见。在这里Python先找到实例my_dog(),再查找与这个实例相关联的属性name。那么对类中的方法也可以用句点表示法来调用。

【懒懒的Python学习笔记八】

【懒懒的Python学习笔记八】

要调用方法的时候,可依次指定实例和要调用的方法。

类和实例的使用

1、创建一个Car类

下面简单编写一表示汽车的类,它存储了有关汽车的信息。

【懒懒的Python学习笔记八】


【懒懒的Python学习笔记八】


2、给属性指定默认值

类的每个属性都必须有初始值。在某些情况下可以给属性设定一个默认值,这样在实例化的时候就不必为其提供初始值的形参。

【懒懒的Python学习笔记八】


【懒懒的Python学习笔记八】


我们在__init()__方法中,创建一个read_odometer的属性,并将其初始值设置为0,这样我们在实例化对象的时候就不必为其增加实参了。

3、修改属性值

修改属性值的方法大致有两种,一种是通过实例直接修改;另一种是通过方法修改。

【懒懒的Python学习笔记八】


【懒懒的Python学习笔记八】

我们可以直接使用句点表示法直接访问并设置汽车的属性odometer_reading()并将其设置为100。

通过方法修改

【懒懒的Python学习笔记八】


【懒懒的Python学习笔记八】


继承

在编写类时,并非总是要从空白开始,一个类继承另一个类时,它将自动获得另一个类的所有属性和方法:原有的类称为父类;而新类称为子类。子类继承父类的所有方法和属性,并且还可以有自己的属性和方法。

1、子类的__init()__方法

创建子类的实例的时候,Python首先完成的任务是给父类所有的属性赋值,这时候子类的方法__init()__需要父类施以援手。

【懒懒的Python学习笔记八】

【懒懒的Python学习笔记八】

创建子类的时候,父类必须包含在当前文件中且位于子类之前,定义子类的时候括号内必须指定父类名字。子类的__init()__方法内的super()函数是一个特殊的函数,帮助Python将子类与父类连接起来,这行代码让Python调用父类的__init()__方法,函数super()接受两个实参,分别是子类名称和对象self。在Python 3版本中super()函数则不需要参数。

2、给子类定义属性和方法

子类除了包含父类的属性和方法之外,通常还有自己特有的方法和属性,我们修改以上代码

【懒懒的Python学习笔记八】

【懒懒的Python学习笔记八】


要给子类定义属性,首先要初始化父类的属性,在初始化子类的特有属性

3、重写父类的方法

有时候父类的一些方法并不符合子类的需求,这时候需要在子类中对父类的方法进行重写,为此可以在子类中定义一个与父类需要重写的方法同名的方法,这样Python不会考虑父类中的方法而只会关注你在子类中定义的相应的方法。