Python的繼承與多繼承
阿新 • • 發佈:2019-02-04
Python同樣支援類的繼承,如果一種語言不支援繼承,類就沒有什麼意義
class A(): #這是父親類
def hello(self):
print("我是父類")
class B(A): #這是兒子類,繼承了父親的性格
def __init__(self):
print("我是子類")
ss = B() #例項化B
ss.hello() #呼叫父親的類
可以看到,在定義B類的時候,括號裡面加了個A,這樣就寫成了一個繼承類,B是A的兒子,B繼承了A的一切。B可以隨時呼叫它的父親A裡面的函式。這就是繼承的語法,需要注意的是,所有的類都是object的子類。
單繼承和多繼承:
單繼承:每個類只能繼承一個類
多繼承:每個類允許繼承多個類
class Fish(): #定義一個魚類,會游泳 def __init__(self,name): self.name = name def swim(self): print(self.name) print("我會游泳") class Bird(): #定義一個鳥類,會飛 def __init__(self,name): self.name = name def fly(self): print(self.name) print("我會飛") class person(): #定義一個人類,會工作 def __init__(self,name): self.name = name def work(self): print(self.name) print("我會工作") class SuperMan(person,Bird,Fish):#超人,要會工作,會飛,會游泳 def __init__(self,name): self.name = name s = SuperMan("我是超人") s.fly() s.work() s.swim()
這裡定義了一個超人,那麼既然是超人,那就要會飛,會游泳,會做人類做的事,所以很形象的解釋出了一個關於多繼承的例子
只要繼承了一個父親類,那麼我們可以隨時呼叫父親裡面的函式,子類繼承是有順序的,它會按照順序來檢視。關於多繼承,我們不推崇這種寫法,隱患很多,一旦出了bug,那麼很難找出來。
類裡面還有一種寫法,叫組合:
class Milk(): def __init__(self,x): self.num = x class Porridge(): def __init__(self,x): self.num = x class breakfast(): def __init__(self,x,y): self.milk = Milk(x) self.porridge = Porridge(y) def name(self): print("我今天早餐吃了{0}杯牛奶,{1}碗粥".format(self.milk.num,self.porridge.num)) ss = breakfast(2,3) ss.name()
這就是組合,直接把需要的類放進去例項化就可以了
如果想擴充套件父類的建構函式,那麼就有這個寫法:
class B():
def __init__(self,name):
print("B")
print(name)
class C(B):
def __init__(self,name):
B.__init__(self,name) #首先呼叫父類的建構函式
print("這是c中附加的功能")#其次再增加自己的功能
c = C("我是c")
這就擴充套件了父類的建構函式。
關於繼承類的語法,都不難理解,主要是看自己怎麼運用。