1. 程式人生 > >Python的繼承與多繼承

Python的繼承與多繼承

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")

這就擴充套件了父類的建構函式。

關於繼承類的語法,都不難理解,主要是看自己怎麼運用。