Python面向对象教程之单继承

上篇文章(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的果壳

喜欢的朋友可以去关注(关注后有福利哦~),记得先给本文点赞或者点喜欢呐!

微信公众号:superdiao的果壳
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章