新聞中心
我們經(jīng)常遇到不同的產(chǎn)品,它們有一個(gè)基本模型和一個(gè)高級(jí)模型,在基本模型的基礎(chǔ)上增加了一些功能。面向?qū)ο蟮能浖7椒軌驍U(kuò)展現(xiàn)有類的能力來構(gòu)建新的類,而不是從頭開始構(gòu)建。在 OOP 術(shù)語中,這種特性被稱為繼承,現(xiàn)有的類被稱為基類或父類,而新的類被稱為子類或子類。

當(dāng)一個(gè)新的類與一個(gè)現(xiàn)有的類具有“是”的關(guān)系時(shí),繼承就出現(xiàn)了。
狗是一種動(dòng)物。貓也是一種動(dòng)物。因此,動(dòng)物是基類,而狗和貓是繼承類。
四邊形有四條邊。矩形是四邊形,正方形也是四邊形。四邊形是基類(也稱為父類),而矩形和正方形是繼承的類——也稱為子類。
子類從父類繼承數(shù)據(jù)定義和方法。這有助于重用已有的功能。子類可以添加一些定義或者重新定義一個(gè)基類方法。
這個(gè)特性在為系統(tǒng)中的對(duì)象構(gòu)建類的層次結(jié)構(gòu)時(shí)非常有用。也可以基于一個(gè)以上的現(xiàn)有類設(shè)計(jì)一個(gè)新類。這個(gè)特性叫做多重繼承。
建立繼承的一般機(jī)制如下所示:
Syntax:
class parent:
statements
class child(parent):
statements
定義子類時(shí),父類的名稱放在它前面的括號(hào)中,表示兩者之間的關(guān)系。父類中定義的實(shí)例屬性和方法將被子類的對(duì)象繼承。
為了演示一個(gè)更有意義的例子,首先定義一個(gè)四邊形類,并將其用作矩形類的基類。
具有四條邊作為實(shí)例變量和周長(zhǎng)()方法的四邊形類定義如下:
Example:
class quadriLateral:
def __init__(self, a, b, c, d):
self.side1=a
self.side2=b
self.side3=c
self.side4=d
def perimeter(self):
p=self.side1 + self.side2 + self.side3 + self.side4
print("perimeter=",p) 構(gòu)造器(__init__()方法)接收四個(gè)參數(shù),并將它們分配給四個(gè)實(shí)例變量。要測(cè)試上述類,請(qǐng)聲明其對(duì)象并調(diào)用perimeter()方法。
>>>q1=quadriLateral(7,5,6,4)
>>>q1.perimeter()
perimeter=22我們現(xiàn)在基于quadriLateral類設(shè)計(jì)一個(gè)矩形類(矩形是四邊形!).實(shí)例變量和基類中的perimeter()方法應(yīng)該自動(dòng)對(duì)其可用,而無需重新定義。
由于矩形的相對(duì)邊是相同的,我們只需要兩個(gè)相鄰的邊來構(gòu)造它的對(duì)象。因此,__init__()方法的另外兩個(gè)參數(shù)被設(shè)置為無。 方法使用 super() 函數(shù)將參數(shù)轉(zhuǎn)發(fā)給其基(四邊形)類的構(gòu)造器。 對(duì)象初始化時(shí)將side3和side4設(shè)置為無。 矩形類的構(gòu)造器使對(duì)邊相等。請(qǐng)記住,它已經(jīng)自動(dòng)繼承了perimeter()方法,因此沒有必要重新定義它。
Example: Inheritance
class rectangle(quadriLateral):
def __init__(self, a, b):
super().__init__(a, b, a, b) 我們現(xiàn)在可以聲明矩形類的對(duì)象并調(diào)用perimeter()方法。
>>> r1=rectangle(10, 20)
>>> r1.perimeter()
perimeter=60在 Python 中重寫
在上面的例子中,我們看到了如何在構(gòu)造繼承類時(shí)重用基類的資源。但是,繼承的類可以有自己的實(shí)例屬性和方法。
父類的方法可用于繼承的類。但是,如果需要,我們可以修改任何基類方法的功能。為此,繼承的類包含方法的新定義(與基類中已經(jīng)存在的名稱和簽名相同)。很自然,一個(gè)新類的對(duì)象可以訪問這兩種方法,但是當(dāng)被調(diào)用時(shí),來自它自己的類的對(duì)象將具有優(yōu)先權(quán)。這稱為方法重寫。
首先,我們將在矩形類中定義一個(gè)名為area()的新方法,并將其用作square類的基礎(chǔ)。矩形的面積是其相鄰邊的乘積。
Example:
class rectangle(QuadriLateral):
def __init__(self, a,b):
super().__init__(a, b, a, b)
def area(self):
a = self.side1 * self.side2
print("area of rectangle=", a) 讓我們定義繼承矩形類的正方形類。area()方法被覆蓋,以實(shí)現(xiàn)將正方形面積作為其邊的正方形的公式。
Example:
class square(rectangle):
def __init__(self, a):
super().__init__(a, a)
def area(self):
a=pow(self.side1, 2)
print('Area of Square: ', a)
>>>s=Square(10)
>>>s.area()
Area of Square: 100
```**** 文章標(biāo)題:Python中的繼承
文章起源:http://www.dlmjj.cn/article/coggjjh.html


咨詢
建站咨詢
