Python 基礎(chǔ)教程

Python 流程控制

Python 函數(shù)

Python 數(shù)據(jù)類型

Python 文件操作

Python 對象和類

Python 日期和時(shí)間

Python 高級知識

Python 參考手冊

Python 繼承

繼承使我們能夠定義一個(gè)繼承父類所有功能的類,并允許我們添加更多功能。 在本文中,您將學(xué)習(xí)在Python中使用繼承。

什么是繼承?

繼承是面向?qū)ο缶幊讨械囊豁?xiàng)強(qiáng)大功能。

它指的是定義一個(gè)新,而對現(xiàn)有類的進(jìn)行很少修改或沒有修改。新類稱為派生(或子)類,而從其繼承的新類稱為基(或父)類。

Python繼承語法

class BaseClass:
  #基類主體
class DerivedClass(BaseClass):
  #派生類的主體

派生類從基類繼承要素,并向其添加新要素。這可以提高代碼的可重用性。

Python中的繼承示例

為了演示繼承的使用,讓我們舉一個(gè)示例。

多邊形是具有3個(gè)或更多邊的閉合圖形。說,我們有一個(gè)名為的類,Polygon定義如下。

class Polygon:
    def __init__(self, no_of_sides):
        self.n = no_of_sides
        self.sides = [0 for i in range(no_of_sides)]

    def inputSides(self):
        self.sides = [float(input("輸入邊長 "+str(i+1)+" : ")) for i in range(self.n)]

    def dispSides(self):
        for i in range(self.n):
            print("邊長",i+1,"是",self.sides[i])

此類具有數(shù)據(jù)屬性,用于存儲(chǔ)邊數(shù),邊數(shù)和每邊的大小作為列表,即邊數(shù)。

方法inputSides()取每一側(cè)的大小,類似地,dispSides()將它們正確顯示。

三角形是具有3個(gè)邊的多邊形。因此,我們可以創(chuàng)建一個(gè)名為的類,該類Triangle繼承自Polygon。這使得類中所有可用的屬性都可以在中Polygon輕松使用Triangle。我們不需要再次定義它們(代碼可重用性)。Triangle定義如下。

class Triangle(Polygon):
    def __init__(self):
        Polygon.__init__(self,3)

    def findArea(self):
        a, b, c = self.sides
        # 計(jì)算半周長
        s = (a + b + c) / 2
        area = (s*(s-a)*(s-b)*(s-c)) ** 0.5
        print('三角形的面積是 %0.2f' %area)

但是,class Triangle具有一種新方法findArea()來查找和打印三角形的區(qū)域。這是一個(gè)示例運(yùn)行。

>>> t = Triangle()

>>> t.inputSides()
輸入邊長 1 : 3
輸入邊長  2 : 5
輸入邊長  3 : 4

>>> t.dispSides()
邊長 1 是 3.0
邊長 2 是 5.0
邊長 3 是 4.0

>>> t.findArea()
三角形的面積是 6.00

我們可以看到,盡管我們沒有為類Triangle定義inputSides()或sides()之類的方法,但是我們能夠使用它們。

如果在類中找不到屬性,則搜索繼續(xù)到基類。如果基類本身是從其他類派生的,則將以遞歸方式重復(fù)此操作。

Python中的方法重寫

在上面的示例中,請注意,在Triangle和Polygon這兩個(gè)類中都定義了__init __()方法。 發(fā)生這種情況時(shí),派生類中的方法將覆蓋基類中的方法。 也就是說,Triangle中的__init __()優(yōu)先于Polygon中的__init __()。

通常,當(dāng)覆蓋基本方法時(shí),我們傾向于擴(kuò)展定義而不是簡單地替換它。 通過從派生類中的基類中調(diào)用基類中的方法(從Triangle中的__init __()中調(diào)用Polygon .__ init __())來完成相同的操作。

更好的選擇是使用內(nèi)置函數(shù)super()。因此,super().__init__(3)等效于Polygon.__init__(self,3)并且是首選。您可以了解有關(guān)Python中super()函數(shù)的更多信息。

兩個(gè)內(nèi)置函數(shù)isinstance(),issubclass()用于檢查繼承。如果對象是該類或從其派生的其他類的示例,則函數(shù)isinstance()返回True。Python中的每個(gè)類都繼承自基類object。

>>> isinstance(t,Triangle)
True

>>> isinstance(t,Polygon)
True

>>> isinstance(t,int)
False

>>> isinstance(t,object)
True

同樣,issubclass()用于檢查類的繼承。

>>> issubclass(Polygon,Triangle)
False

>>> issubclass(Triangle,Polygon)
True

>>> issubclass(bool,int)
True

                                                                                                                                                                                                   

丰满人妻一级特黄a大片,午夜无码免费福利一级,欧美亚洲精品在线,国产婷婷成人久久Av免费高清