Python教程

python - 类

本文主要是介绍python - 类,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

1 类的创建和使用

1.1 创建类

创建一个Dog类,然后赋予其名字和年龄将其实例化。我们赋予每个dog坐下和打滚的能力
python中首字母大写的名称指的是类。类定义中的括号是空的,因为我们要从空白创建这个类。

1.2 方法__init__( )

类中的函数称为方法,方法__init__() 是一个特殊的方法,每当你根据类创建新实例时,Python都会自动运行它。
在这个方法的定义中,形参self 必不可少,还必须位于其他形参的前面。为何必须在方法定义中包含形参self 呢?因为Python调用这个__init__()方法来创建Dog实例时,将自动传入实参self 。每个与类相关联的方法调用都自动传递实参self,它是一个指向实例本身的引用,让实例能够访问类中的属性和方法。我们将通过实参向Dog()传递名字和年龄,self会自动传递,因此我们不需要传递它。每当我们根据Dog类创建实例时,都只需给最后两个形参(name 和age )提供值。

1.3 根据类创建实例

可以将类视为创建实例的说明.
python使用实参调用Dog类中的方法__init__().而它使用我们提供的值来设置属性,方法__init__()中会自动返回此实例,然后储存在我们设置的变量中。

1.3.1 访问属性

访问属性使用句点法,在类中引用这个属性时,使用的是self.name。

1.3.2 调用方法

可以使用句点法来调用Dog类中的任意方法。要调用方法,可以指定实例的名称和调用的方法,并用句点来分隔他们。

1.3.3 创建多个实例

将多个实例存储在不同的变量中,或者占用列表或字典的不同位置

2 使用类和实例

可以使用类来模拟许多场景,你可以直接修改类创建的实例的属性,也可以以特定的方法来修改。

2.1 Car类

创建一个Car类

2.2 给属性设定默认值

下面给它添加一个随时间变化的属性,它存储汽车的总里程。
类中的每个属性都必须有初始值,哪怕这个值是0或空字符串。在有些情况下,如在方法__init__() 内指定设置默认值时,就无需包含为它提供初始值的形参。
为Car添加一个odometer的属性,默认为0,再添加一个读里程的方法read_odometer().

2.3 修改属性的值

有三种方法修改属性的值。

2.3.1 直接修改属性的值

直接将里程表读数改为23

2.3.2 通过方法修改属性的值

无需直接访问属性,将值传递给一个方法,让它在内部更新。
添加一个update_odometer()的方法

可对方法update_odometer()进行扩展,使其在修改里程表读数时做些额外的工作。下面来添加一些逻辑,禁止任何人将里程表读数往回调.

2.3.3 通过方法对属性的值进行递增

有时候需要将属性值递增特定的量,而不是将其设置为全新的值。假设我们购买了一辆二手车,且从购买到登记期间增加了100英里的里程,下面的方法让我们能够传递这个增
量,并相应地增加里程表读数.

3 继承

如果你编写的类是另一个类的特殊版本,可使用继承。当一个类继承另一个类时,它将自动获得另一个类的所有属性和方法。原有的类称为父类,新类称为子类。

3.1 子类的方法__init__()

创建子类的实例时,Python首先需要完成的任务是给父类的所有属性赋值。为此子类的方法__init__()需要父类施以援手。
例如,下面来模拟电动汽车。电动汽车是一种特殊的汽车,因此我们可以在前面创建的Car类的基础上创建新类ElectricCar,这样我们就只需为电动汽车特有的属性和行为编写代码。
创建子类,父类必须包含其中,方法__init__()接受创建Car实例所需的信息
super() 是一个特殊函数,帮助Python将父类和子类关联起来。这行代码让Python调用ElectricCar的父类的方法__init__(),让ElectricCar实例包含父类的所有属性。父类也称为超类(superclass),名称super因此而得名。

3.2 给子类定义属性和方法

让一个类继承另一个类后,可添加区分子类和父类所需的新属性和方法。在子类中添加一个电量信息。

3.3 重写父类方法

对于父类的方法,只要它不符合子类模拟的实物的行为,都可对其进行重写。为此,可在子类中定义一个这样的方法,即它与要重写的父类方法同名。这样,Python将不会考虑这个父类方法,而只关注你在子类中定义的相应方法。
父类添加fill_gas()方法

子类添加同名的方法可以重新定义父类方法

3.4 将实例用作属性

使用代码模拟实物时,你可能会发现自己给类添加的细节越来越多,属性和方法清单以及文件都越来越长。在这种情况下,可能需要将类的一部分作为一个独立的类提取出来。你可以将大型类拆分成多个协同工作的小类。
添加一个Battery类,不继承任何父类。在ElectricCar类中调用Battery类,创建一个新的battery实例,存储到自己的self.battery属性中

现在我们想多详细地描述电瓶都可以,且不会导致ElectricCar类混乱不堪。下面再给Battery类添加一个方法,它根据电瓶容量报告汽车的续航里程:

这篇关于python - 类的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!