更多课程 选择中心


Python培训

400-111-8989

自学Python教程【第四十八节】面向对象(4)

  • 发布:Python培训
  • 来源:Crossin的编程教室
  • 时间:2019-03-06 14:09

欢迎大家来到Python自学教室,上一讲我们用了两道数学题为大家展示了面向对象和面向过程的不同,但是可能还有同学没有看出面向对象的优势,或者说觉得Python面向对象的优势并不明显,那是因为我们现在接触的程序还不够复杂,等以后你写的程序越来越大,就能体会到这其中的差别了。今天我们就来举一个稍稍再复杂一点的例子。

自学<a style='color:blue' href='http://python.tedu.cn/data/'>Python教程</a>【第四十八节】面向对象(4)

仍然是从A地到B地,这次除了有汽车,我们还有了一辆自行车!

自行车和汽车有着相同的属性:速度(speed)。还有一个相同的方法(drive),来输出行驶/骑行一段距离所花的时间。但这次我们要给汽车增加一个属性:每公里油耗(fuel)。而在汽车行驶一段距离的方法中,除了要输出所花的时间外,还要输出所需的油量。

面向过程的方法,你可能需要写两个函数,然后把数据作为参数传递进去,在调用的时候要搞清应该使用哪个函数和哪些数据。有了面向对象,你可以把相关的数据和方法封装在一起,并且可以把不同类中的相同功能整合起来。这就需要用到面向对象中的另一个重要概念:继承。

我们要使用的方法是,创建一个叫做Vehicle的类,表示某种车,它包含了汽车和自行车所共有的东西:速度,行驶的方法。然后让Car类和Bike类都继承这个Vehicle类,即作为它的子类。在每个子类中,可以分别添加各自独有的属性。

Vehicle类被称为基本类或超类,Car类和Bike类被成为导出类或子类。

class Vehicle:

def __init__(self, speed):

self.speed = speed

def drive(self, distance):

print 'need %f hour(s)' % (distance / self.speed)

class Bike(Vehicle):

pass

class Car(Vehicle):

def __init__(self, speed, fuel):

Vehicle.__init__(self, speed)

self.fuel = fuel

def drive(self, distance):

Vehicle.drive(self, distance)

print 'need %f fuels' % (distance * self.fuel)

b = Bike(15.0)

c = Car(80.0, 0.012)

b.drive(100.0)

c.drive(100.0)

解释一下代码:

__init__函数会在类被创建的时候自动调用,用来初始化类。它的参数,要在创建类的时候提供。于是我们通过提供一个数值来初始化speed的值。

class定义后面的括号里表示这个类继承于哪个类。Bike(Vehicle)就是说Bike是继承自Vehicle中的子类。Vehicle中的属性和方法,Bike都会有。因为Bike不需要有额外的功能,所以用pass在类中保留空块,什么都不用写。

Car类中,我们又重新定义了__init__和drive函数,这样会覆盖掉它继承自Vehicle的同名函数。但我们依然可以通过“Vehicle.函数名”来调用它的超类方法。以此来获得它作为Vehicle所具有的功能。注意,因为是通过类名调用方法,而不是像之前一样通过对象来调用,所以这里必须提供self的参数值。在调用超类的方法之后,我们又给Car增加了一个fuel属性,并且在drive中多输出一行信息。

最后,我们分别创建一个速度为15的自行车对象,和一个速度为80、耗油量为0.012的汽车,然后让它们去行驶100的距离。

恭喜您在Python自学的道路上又坚持了一天,我们在Python面向对象这里学习了四节课,了解了Python面向对象的基本定义、用法,也通过案例对比了解了Python面向对象和面向过程的差异化及优势所在,但也还只能带大家简单了解、入门,更多的内容还需要大家自己去学习,下一讲我们将带大家学习新的内容,你准备好了吗?

免责声明:内容和图片源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

预约申请免费试听课

填写下面表单即可预约申请免费试听! 怕学不会?助教全程陪读,随时解惑!担心就业?一地学习,可全国推荐就业!

上一篇:自学Python教程【第四十七节】面向对象(3)
下一篇:自学Python教程【第四十九节】and-or技巧

【Git第八节】移除文件

【Python实战】四行Python代码就能知道你那的天气,你敢信?

Python实战【用Python写游戏第十三节】exe打包

Python实战【用Python写游戏第十二节】屡败屡战

  • 扫码领取资料

    回复关键字:视频资料

    免费领取 达内课程视频学习资料

Copyright © 2023 Tedu.cn All Rights Reserved 京ICP备08000853号-56 京公网安备 11010802029508号 达内时代科技集团有限公司 版权所有

选择城市和中心
黑龙江省

吉林省

河北省

湖南省

贵州省

云南省

广西省

海南省