您的位置:首页 > 其它

面向对象(二):类的继承

2020-06-28 05:27 731 查看

类的继承

继承的基本语法:
class ClassName(baseclasslist):
‘’‘类的帮助信息’’’
statement #类体

案例1:创建水果基类及其派生类

# 创建水果基类及其派生类
class Fruit:
'''水果类'''
color="绿色" #定义类属性
def harvest(self,color):#定义方法。
print('我成熟之前是:',Fruit.color,'的!') #输出类属性
print('我成熟了,丰收了...')
print('我变成:',color,'的!\n')#输出形式参数color
## 水果基类创建完成。

class Apple(Fruit):#创建苹果类,继承自父类“Fruit”
color='红色' #苹果成熟了是红色的
def __init__(self):
print('我是苹果')

class Banana(Fruit):#创建香蕉类,继承自父类“Fruit”
color='黄色' #香蕉成熟了是黄色的
def __init__(self):
print('我是香蕉')

apple=Apple() #创建苹果类的一个实例
apple.harvest(apple.color)  #调用基类的harvest()方法

banana=Banana() #创建香蕉类的一个实例
banana.harvest(banana.color)  #调用基类的harvest()方法

运行结果为:

我是苹果
我成熟之前是: 绿色 的!
我成熟了,丰收了...
我变成: 红色 的!

我是香蕉
我成熟之前是: 绿色 的!
我成熟了,丰收了...
我变成: 黄色 的!

根据本案例,我们可以看出,当一个子类继承了某个父类(基类)后,也就继承了这个父类的实例方法和类属性。

再来看一个例子,例子的原型来自(Crossin的编程教室)。让大家感受下继承的魅力。

案例:小明和小红相约去归元寺游玩,小明家距离归元寺30公里,他打算骑自行车前往,车速为15公里每小时。小红家距离归元寺100公里,打算开车前往,车速为60公里每小时,每公里油耗为0.013升。求:小明和小红各自到达归元寺的时间,小红的汽车油耗。

分析:自行车和汽车有着相同的属性:速度(speed),还有一个相同的方法:(drive)来输出行驶或骑行一段距离所花的时间。此外,对汽车需要增加一个属性:每公里油耗(fuel),因此对汽车的分析,除了要输出行驶时间外,还要输出油耗。
因此,构造一个基类(Vehicle),表示某种车,它包含了自行车和汽车共同的属性即速度(speed)和共同的方法(drive)。然后,让汽车类(Car)和自行车类(Bike)都继承这个基类(Vehicle),即作为它的子类。在每个子类中,可以分别添加各自独有的属性。

class Vehicle:#创建车类,即创建基类
def __init__(self,speed):
self.speed=speed #创建属性(speed)
def drive(self,distance): #定义方法(行驶时间drive)
print('我到归元寺需要 %.2f 小时.\n'%(distance/self.speed))

class Bike(Vehicle):#创建自行车类,继承自父类“Vehicle”
pass   #Bike类的属性和方法在Vehicle类中都有,不需要额外的功能,用pass语句保留空块。

class Car(Vehicle):#创建汽车类,,继承自父类“Vehicle”
def __init__(self,speed,fuel):
Vehicle.__init__(self,speed)
self.fuel=fuel #创建属性(fuel)

def drive(self,distance): #定义方法(drive)
Vehicle.drive(self,distance) #继承父类(Vehicle)的方法(drive)
print('我到归元寺耗用了 %.2f 升的汽油.\n'%(distance*self.fuel))

print('我是小明')
bike=Bike(15)#创建自行车类的一个实例,速度为15
bike.drive(30)#调用方法

print('我是小红')
car=Car(60,0.013)#创建汽车类的一个实例,速度为60,油耗为0.013
car.drive(100)

运行结果为:

我是小明
我到归元寺需要 2.00 小时.

我是小红
我到归元寺需要 1.67 小时.

我到归元寺耗用了 1.30 升的汽油
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: