繼承
程序是什么养葵?程序是用來解決實際問題的,也可以說是對現(xiàn)實世界的一種量化,一種現(xiàn)實世界的映射背桐。
在實際生活中有子承父業(yè)的說法刘陶,在程序世界中有沒有呢?答案是有的牢撼。
什么是繼承
子承父業(yè)是繼承匙隔,繼承是一種關(guān)系,兩個人之間的關(guān)系熏版。在程序世界中的映射是怎樣的呢纷责?程序中的繼承也是一種關(guān)系,是兩個類之間的關(guān)系撼短。既然是兩個類之間的關(guān)系再膳,就需要確定一下繼承順序,類比現(xiàn)實世界曲横,程序中的被繼承者類稱為父類或基類喂柒,繼承者類稱為子類或派生類。
繼承的格式
class Animal(object):
pass
# class 類名(父類名):
# 方法列表
所有的類都繼承 object 類禾嫉,object 類是所有類的父類或基類灾杰。
單繼承
什么是單繼承
單繼承,只有一個直接父類的類熙参,稱為單繼承艳吠。
class 類名(父類名):
pass
多繼承
與單繼承相對的是單繼承,有多個直接父類孽椰,稱為多繼承
class 類名(父類名1昭娩,父類名2,父類名3.... 父類名n):
pass
多層繼承
多層繼承和多繼承的區(qū)別 多繼承黍匾,橫向栏渺,就像是一片地上有很多高樓一樣。多層繼承锐涯,縱向磕诊,一棟高樓有很多層。
class Animal(object):
pass
class Dog(Animal):
pass
多層繼承
Dog 繼承自 Animal全庸,Animal繼承自 object秀仲,object 是所有類的父類
重寫
方法的重寫
什么是重寫
在子類中創(chuàng)建一個方法,和父類中的某個方法同名壶笼,就是重寫(方法的重寫或方法的覆寫)
class Animal(object):
def eat(self):
print("動物吃東西")
class Dog(Animal):
def eat(self):
print("狗吃東西")
dog = Dog()
dog.eat() # 默認調(diào)用子類的方法
# 結(jié)果為:
# 狗吃東西
重寫的作用
當父類中的方法不符合我們的需求時,可以通過重寫雁刷,實現(xiàn)我們的需求覆劈。
方法可以重寫,屬性可不可以重寫?答案是可以的
屬性的重寫
class Animal(object):
def __init__(self):
self.age = 120
class Dog(Animal):
def __init__(self):
self.age = 12
dog = Dog()
print("狗狗的年齡%d " % dog.age) # 默認調(diào)用子類的屬性
# 結(jié)果為:
# 狗狗的年齡12
調(diào)用父類的方法
重寫之后责语,如果發(fā)現(xiàn)父類的方法還有價值炮障,可以調(diào)用父類的方法
通過父類名強制調(diào)用
一般用于多繼承
class Animal(object):
def __init__(self):
self.age = 120
def eat(self):
print("動物吃東西")
class Dog(Animal):
def __init__(self):
self.age = 12
def eat(self):
print("狗吃東西")
Animal.eat(self) # 在重寫的方法內(nèi)強制調(diào)用 父類名.父類方法名() 如果需要參數(shù),則需要傳參
dog = Dog()
dog.eat()
# 結(jié)果為:
# 狗吃東西
# 動物吃東西
super() 兼容版
python2坤候、python3 都可用
class Animal(object):
def __init__(self):
self.age = 120
def eat(self):
print("動物吃東西")
class Dog(Animal):
def __init__(self):
self.age = 12
def eat(self):
print("狗吃東西")
# 兼容版 super(子類名, 子類對象).父類方法() 如果需要參數(shù)胁赢,則需要傳參
super(Dog, self).eat()
dog = Dog()
dog.eat()
# 結(jié)果為:
# 狗吃東西
# 動物吃東西
super()
python3 專屬
class Animal(object):
def __init__(self):
self.age = 120
def eat(self):
print("動物吃東西")
class Dog(Animal):
def __init__(self):
self.age = 12
def eat(self):
print("狗吃東西")
super().eat() # super().方法名() 如果需要參數(shù),則需要傳參
dog = Dog()
dog.eat()
# 結(jié)果為:
# 狗吃東西
# 動物吃東西
到此結(jié) ? DragonFang ? 2018.4.12