2020国产成人精品视频,性做久久久久久久久,亚洲国产成人久久综合一区,亚洲影院天堂中文av色

分享

Python繼承機制及其使用

 碼農(nóng)9527 2021-09-16

Python類的封裝、繼承、多態(tài)3大特性,前面章節(jié)已經(jīng)詳細(xì)介紹了Python類的封裝,本節(jié)繼續(xù)講解Python類的繼承機制。

    繼承機制經(jīng)常用于創(chuàng)建和現(xiàn)有類功能類似的新類,又或是新類只需要在現(xiàn)有類基礎(chǔ)上添加一些成員(屬性和方法),但又不想直接將現(xiàn)有類代碼復(fù)制給新類。也就是說,通過使用繼承這種機制,可以輕松實現(xiàn)類的重復(fù)使用。

    舉個例子,假設(shè)現(xiàn)有一個Shape類,該類的draw()方法可以在屏幕上畫出指定的形狀,現(xiàn)在需要創(chuàng)建一個Form類,要求此類不但可以在屏幕上畫出指定的形狀,還可以計算出所畫形狀的面積。要創(chuàng)建這樣的類,笨方法是將draw()方法直接復(fù)制到新類中,并添加計算面積的方法。實現(xiàn)代碼如下所示:

class Shape:
 def draw(self,content):
  print("畫",content)class Form:
 def draw(self,content):
  print("畫",content) def area(self):
  #....
  print("此圖形的面積為...")123456789復(fù)制代碼類型:[python]

    當(dāng)然還有更簡單的方法,就是使用類的繼承機制。實現(xiàn)方法為:讓From類繼承Shape類,這樣當(dāng)From類對象調(diào)用draw()方法時,Python解釋器會先去From中找以draw為名的方法,如果找不到,它還會自動去Shape類中找。如此,我們只需在From類中添加計算面積的方法即可,示例代碼如下: 

class Shape:
 def draw(self,content):
  print("畫",content)class Form(Shape):
 def area(self):
  #....
  print("此圖形的面積為...")1234567復(fù)制代碼類型:[python]

    上面代碼中,classFrom(Shape)就表示From繼承Shape。

    Python中,實現(xiàn)繼承的類稱為子類,被繼承的類稱為父類(也可稱為基類、超類)。因此在上面這個樣例中,F(xiàn)rom是子類,Shape是父類。

    子類繼承父類時,只需在定義子類時,將父類(可以是多個)放在子類之后的圓括號里即可。語法格式如下:

class 類名(父類1, 父類2, ...):
 #類定義部分12復(fù)制代碼類型:[python]

    注意,如果該類沒有顯式指定繼承自哪個類,則默認(rèn)繼承object類(object類是Python中所有類的父類,即要么是直接父類,要么是間接父類)。另外,Python的繼承是多繼承機制(和C++一樣),即一個子類可以同時擁有多個直接父類。

    注意,有讀者可能還聽說過“派生”這個詞匯,它和繼承是一個意思,只是觀察角度不同而已。換句話話,繼承是相對子類來說的,即子類繼承自父類;而派生是相對于父類來說的,即父類派生出子類。

    了解了繼承機制的含義和語法之后,下面代碼演示了繼承機制的用法:

class People:
 def say(self):
  print("我是一個人,名字是:",self.name)class Animal:
 def display(self):
  print("人也是高級動物")#同時繼承 People 和 Animal 類#其同時擁有 name 屬性、say() 和 display() 方法class Person(People, Animal):
 passzhangsan = Person()
zhangsan.name = "張三"zhangsan.say()
zhangsan.display()1234567891011121314復(fù)制代碼類型:[python]

    運行結(jié)果,結(jié)果為:

我是一個人,名字是: 張三
人也是高級動物12復(fù)制代碼類型:[python]

    可以看到,雖然Person類為空類,但由于其繼承自People和Animal這2個類,因此實際上Person并不空,它同時擁有這2個類所有的屬性和方法。

    沒錯,子類擁有父類所有的屬性和方法,即便該屬性或方法是私有(private)的。

    關(guān)于Python的多繼承

    事實上,大部分面向?qū)ο蟮木幊陶Z言,都只支持單繼承,即子類有且只能有一個父類。而Python卻支持多繼承(C++也支持多繼承)。

    和單繼承相比,多繼承容易讓代碼邏輯復(fù)雜、思路混亂,一直備受爭議,中小型項目中較少使用,后來的Java、C#、PHP等干脆取消了多繼承。

    使用多繼承經(jīng)常需要面臨的問題是,多個父類中包含同名的類方法。對于這種情況,Python的處置措施是:根據(jù)子類繼承多個父類時這些父類的前后次序決定,即排在前面父類中的類方法會覆蓋排在后面父類中的同名類方法。

    舉個例子:

class People:
 def __init__(self):
  self.name = People def say(self):
  print("People類",self.name)class Animal:
 def __init__(self):
  self.name = Animal def say(self):
  print("Animal類",self.name)#People中的 name 屬性和 say() 會遮蔽 Animal 類中的class Person(People, Animal):
 passzhangsan = Person()
zhangsan.name = "張三"zhangsan.say()12345678910111213141516復(fù)制代碼類型:[python]

    程序運行結(jié)果為:

People類 張三1復(fù)制代碼類型:[python]

    可以看到,當(dāng)Person同時繼承People類和Animal類時,People類在前,因此如果People和Animal擁有同名的類方法,實際調(diào)用的是People類中的。

    雖然Python在語法上支持多繼承,但逼不得已,建議大家不要使用多繼承。

    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多