上篇文章(Python面向对象教程之基本概念)给大家介绍了Python面向对象的基本概念,那么这次主要介绍面向对象编程的一个重要特性:继承。
所谓的“继承”指的是类之间的关系,继承的类称为“子类”,而被继承的类称为“父类”或“超类”或“基类”。简单地说,就是“子类”继承了“父类”的属性和方法等特性。
那么继承究竟有啥用处呢?
先来看看不采取继承方式的代码(依旧用“车”和“自行车”的例子):
# 类“车”的声明
class Vehicle:
def __init__(self,price,weight):
self.price= price
self.weight=weight
# 类“自行车”的声明
class Bike:
def __init__(self,price,weight):
self.price= price
self.weight=weight
vehi = Vehicle('50000','1000')
vehi.price # 返回'50000'
vehi.weight # 返回'1000'
bike = Bike('100','10')
bike.price # 返回'100'
bike.weight # 返回'10'
很显然,上面代码存在冗余,而且维护不方便,比如将self.price= price 改为self.price= price +20,那么需要对两个类的代码块同时修改。
此时,继承的好处就体现出来了,请看下面的代码:
# 父类“车”的声明
class Vehicle:
def __init__(self,price,weight):
self.price= price
self.weight=weight
# 子类“自行车”的声明
class Bike(Vehicle): # 括号里填上父类的名字
pass
vehi = Vehicle('50000','1000')
vehi.price # 返回'50000'
vehi.weight # 返回'1000'
bike = Bike('100','10')
bike.price # 返回'100'
bike.weight # 返回'10'
不难看出,如果用了继承的方法,子类的代码可以得到很大程度的简化,而且如果想将self.price= price 改为self.price= price +20,那么只需要在父类的代码块改就可以了。
当然,如果希望子类有着自己独特的属性和方法,那么可以单独设置:
# 父类的代码不需要改变,子类的代码可以做以下改动:
class Bike(Vehicle):
def __init__(self,price,weight,velocity):
# 继承父类的全部属性
super(Bike,self).__init__(price,weight)
# 对继承父类的price属性进行重新设置
self.price = int(price) * 0.8 # 假设打了8折
# 有自身独有的velocity属性
self.velocity = velocity
bike = Bike('100','10','36')
bike.price # 返回'80' ,注意不是100了
bike.weight # 返回'10'
bike.velocity # 返回'36'
可以看出,子类不仅仅可以继承父类的weight属性,还可以对price属性进行重新设置,甚至子类可以拥有自己的velocity属性。
不过上面只是单继承(也就是只继承一个类),事实上Python是支持继承多个类的,即多继承。而且,继承的时候会涉及到私有属性、方法重写等概念。如果有兴趣的话,可以继续关注本公众号的推送哦~
本文转自微信公众号:superdiao的果壳
喜欢的朋友可以去关注(关注后有福利哦~),记得先给本文点赞或者点喜欢呐!