面向?qū)ο蟮奶卣鳌^承
繼承?一個類型繼承另一個類型,當(dāng)前類型就會擁有另一個類型的公共的屬性和方法,達(dá)到代碼的重復(fù)使用的目的。
繼承的語法:
class 類型(被繼承的類型):
pass
繼承中出現(xiàn)的術(shù)語
父類:被繼承的類,也稱為基類、超類
子類:當(dāng)前類,也稱為派生類
子類繼承父類,體現(xiàn)的時A is a B的關(guān)系
子類繼承父類,就可以使用父類中所有的公開的屬性和方法
繼承鏈
A繼承B,B繼承C,C繼承D
A直接繼承了B,間接繼承了C,D;此時A創(chuàng)建的對象,可以同時使用B,C,D中所有公開的屬性和方法
多繼承
python中,一個類型,可以同時繼承多個類型,同時擁有所有繼承類型的所有公開的屬性和方法
備注:在進行代碼設(shè)計的過程中,可能會出現(xiàn)多繼承,所以盡量不要在父類中定義相同名稱的屬性或者方法
備注2:如果父類中出現(xiàn)了相同名稱的屬性和方法,在使用的時候子類調(diào)用時會優(yōu)先繼承優(yōu)先調(diào)用。
方法重載:偽方法重載~出現(xiàn)在一個類中的不同函數(shù)
方法重寫:子類中,重新定義父類中已經(jīng)存在的方法
子類-父類,兩個實現(xiàn)了繼承關(guān)系的類型,才會有方法重寫
如果方法進行了重寫,在子類對象執(zhí)行這個方法時,優(yōu)先執(zhí)行重寫的方法。
如果子類沒有重寫這個方法,在執(zhí)行時就會執(zhí)行從父類中繼承過來的方法
以下是簡單的實例:
class God(object):
def __init__(self, name):
[self.name*
"); background-size: cover; background-position: 0px 2px;">*](http://link.zhihu.com/?target=http%3A//self.name) = name
def eat(self):
print("風(fēng)餐露宿...")
class LZS(God):-------------------->>>>>>繼承父類
def drink(self):------------------------------>>>>>子類特有
print("喝花酒")
zhishen_lu = LZS("魯智深")
zhishen_lu.eat()
zhishen_lu.drink()
tianpeng = God("天蓬")
[tianpeng.eat*
"); background-size: cover; background-position: 0px 2px;">*](http://link.zhihu.com/?target=http%3A//tianpeng.eat)()
tianpeng.drink()
**擴展:**子類中,訪問父類的屬性和方法:
class User(Person):
def __init__(self, name, age):
# 直接通過父類的類名稱調(diào)用父類的屬性和方法
Person.__init__(name, age)
# 通過super()來調(diào)用父類的屬性和方法
super().__init__(name, age)
**方法重寫的具體實現(xiàn):**
class Eat():
def __init__(self,name):
self.name=name
def Food(self,fod):
print("吃飯了,吃的是%s"%fod)
class Person(Eat):
def Food(self,fod):
print("去吃飯,吃的是%s"%fod)
x=Person("a")
[x.Food*
"); background-size: cover; background-position: 0px 2px;">*](http://link.zhihu.com/?target=http%3A//x.Food)("米")
y=Eat("sds")