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的果殼
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章