Python程序设计基础(9)----类(1)

前言:面向对象程序设计是最有效的软件编写方法之一。在面向对象程序设计中,你编写表示现实世界中的事物和情景的类,并基于这些类来创建对象。编写类时,你定义一大类对象都有的通用行为。基于类创建对象时,每个对象都自动具备这种通用行为然后可根据需要赋予每个对象独特的个性。使用面向对象编程可模拟现实情景,其逼真程度这里需要注达到了令人惊讶的地步。根据类来创建对象称为实例化,这让你能够使用类的实例。在本节中,笔者将编写一些类并创建其实例。将指定可在实例中存储什么信息,定义可对这些实例执行哪些操作。笔者还将编写一些类来扩展既有类的功能,让相似的类能够高效地共享代码。笔者将把自己编写的类存储在模块中,并在自己的程序文件中导入其他软件工程师编写的类。

9.1、创建和使用类
使用类几乎可以模拟任何东西。下面笔者编写一个表示小狗的简单类Dog,它表示的不是特定的小狗,而是任何小狗。对于大多数宠物狗,我们都知道些什么呢?它们都有名字和年龄。我们大多数小狗还会蹲下和打滚。由于大多数小狗都具备上述两项信息(名字和年龄)和两还知道种行为(蹲下和打滚),我们的Dog类将包含它们。这个类让 Python知道如何创建表示小狗的对象。编写这个类后,我们将使用它来创建表示特定小狗的实例。
根据Dog类创建的每个实例都将存储名字和年龄,我们赋予了每条小蹲下(sit())和打滚(roll_over())的能力:
在这里插入图片描述
方法__init__()
类中的函数称为方法。你在前面学到的有关函数的一切都适用于方法,就目前而言,唯一重要的差别是调用方法的方式。方法__init__()是一个特殊方法,每当你根据Dog类创建, Python都会自动运行它。在这个方法的名称中,开头和末尾各有两个下划线,这是新实例时一种约定,旨在避免 Python默认方法与普通方法发生名称冲突。务必确保init()的两边都有两个下划线,否则当你使用类来创建实例时,将不会自动调用这个万法,进而引发难以发现的错误我们将方法init_()定义成包含三个形参:slf、name和age。在这个方法的定义中,形参self必不可少,而且必须位于其他形参的前面。为何必须在方法定义中包含形参self呢?因为 Python调用这个方法来创建Dog实例时,将自动传入实参self。每个与实例相关联的方法调用都自动传递实参self,它是一个指问实例本身的引用,让实例能够访问类中的属性和方法。创建Dog实例时, Python将调用Dog类的方法init()我们将通过实参向Dog()传递名字和年,self会自动传递,因此不需要传递它。每当根据Dog类创建实例时,都只需给最后两个形参龄name和age)提供值。其中定义的两个变量都有前缀self。以sel为前缀的变量可供类中的所有方法使用,可以通过类的任何实例来访问。self.name=name获取与形参name相关联的值,并将其赋给变量name然后该变量被关联到当前创建的实例。self.ageage的作用与此类似。像这样可通过实例访问的变量称为属性。
Dog类还定义了另外两个方法:sit()和 roll_over()。这些方法执行时不需要额外的信息,因此它们只有一个形参self。我们随后将创建的实例能够访问这些方法,换句话说,它们都会蹲下和打滚。当前,sit()和 roll_over()所做的有限,只是打印一条消息,指出小狗正在下或打滚。但可以扩展这些方法以模拟实际情况:如果这个类包含在一个计算机游戏中,这些方法将包含创建小狗蹲下和打滚动画效果的代码;如果这个类是用于控制机器狗的,这些方法将让机器狗做出蹲下和打滚的动作。

9.2、创建类的实例
(1)、下面笔者举例一个创建表示特定小狗的实例:
在这里插入图片描述
输出:
在这里插入图片描述
(2)、调用方法
根据Dog类创建实例后,就能使用句点表示法来调用Dog类中定义的任何方法了,下面来让小狗蹲下和打滚:
在这里插入图片描述
输出:
在这里插入图片描述
(3)、创建多个实例
可按需求根据类创建任意数量的实例,下面创建一个名为your_dog的小狗的实例:
在这里插入图片描述
输出:
在这里插入图片描述
9.3、类和实例的修改
(1)、下面笔者编写一个关于汽车的类,即Car类:
在这里插入图片描述
输出:
在这里插入图片描述
(2)、给属性指定默认值
我们给上面的Car类增加一个里程表,用于读取汽车里程信息,设置其初始里程为66miles:
在这里插入图片描述
输出:
在这里插入图片描述
(3)、我们通过方法来修改属性的值
如果我们通过形参方法来替你更新属性,那么会变得更加有趣,接下来笔者会通过形参和实参来进行属性值的修改,并且增加警示功能,即当里程数值被人为修改时会发出警告,这里我们定义当超过原有里程值时发出警告。
在这里插入图片描述
输出:
在这里插入图片描述
(4)、通过方法对属性的值进行递增
这里我们演示属性值递增的量:
在这里插入图片描述
输出:
在这里插入图片描述
总结:本部分笔者演示了如何创建和使用类,接下来笔者会继续介绍有关类的内容,下一步分我们将学习继承、如何进行类创建工作以及Python标准函数库randint()的作用。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值