Python 自學筆記19 類與物件(2) 繼承

2021-10-23 04:14:26 字數 3606 閱讀 4733

1.宣告方法

------------------子類-------------- 父類/基類------

class derivedclassname(baseclassname):

>>

>

class

parent

:def

hello

(self)

:print

("正在呼叫父類的方法"

)>>

>

class

child

(parent)

:pass

>>

> p = parent(

)>>

> p.hello(

)正在呼叫父類的方法

>>

> c = child(

)>>

> c.hello(

)正在呼叫父類的方法

2.覆蓋

如果子類中定義與父類同名的方法或屬性,則會自動覆蓋父類對應的方法或屬性

>>

>

class

child

(parent)

:def

hello

(self)

:print

("正在呼叫子類的方法"

)>>

> c = child(

)>>

> c.hello(

)正在呼叫子類的方法

>>

> p.hello(

)正在呼叫父類的方法

如果子類中的__init__函式覆蓋了父類的__init__函式,就會導致父類的__init__函式無法執行,

例如:

import random as r

class

fish

:def

__init__

(self)

: self.x = r.randint(0,

10)self.y = r.randint(0,

10)defmove

(self)

: self.x -=

1print

('我的位置是'

,self.x,self.y)

class

goldfish

(fish)

:pass

class

carp

(fish)

:pass

class

salmon

(fish)

:pass

class

shark

(fish)

:def

__init__

(self)

:

self.hungry =

true

defeat

(self)

:if self.hungry:

print

('吃貨的夢想就是天天有的吃!'

) self.hungry =

false

else

:print

('太撐了,吃不下了!'

)

= restart: c:32/

1.py

>>

> fish = fish(

)>>

> fish.move(

)我的位置是 9

5>>

> fish.move(

)我的位置是 8

5>>

> goldfish = goldfish(

)>>

> goldfish.move(

)我的位置是 3

4>>

> goldfish.move(

)我的位置是 2

4>>

> shark = shark(

)>>

> shark.eat(

)吃貨的夢想就是天天有的吃!

>>

> shark.eat(

)太撐了,吃不下了!

>>

> shark.move(

)traceback (most recent call last)

: file ""

, line 1,in

shark.move(

), line 9

,in move

self.x -=

1attributeerror:

'shark'

object has no attribute 'x'

'''最後一句丟擲異常'''

此時,有兩種方法,可以將父類的__init__傳遞下來

1)呼叫未繫結的父類方法

class

shark

(fish)

:def

__init__

(self)

: fish.__init__(self)

'''此句便是重點'''

self.hungry =

true

>>

> shark = shark(

)>>

> shark.move(

)我的位置是 8

7

使用super函式

class

shark

(fish)

:def

__init__

(self)

:super()

.__init__(

)'''super方法可以將fish父類對應的方法繼承下來'''

self.hungry =

true

>>

> shark = shark(

)>>

> shark.move(

)我的位置是 2

10

3.多重繼承

方法:class derivedclassname(base1,base2,base3):

>>

>

class

base1

:def

foo1

(self)

:print

('我是foo1,我為base1代言'

)>>

>

class

base2

:def

foo2

(self)

:print

('我是foo2,我為base2代言'

)>>

>

class

c(base1,base2)

:pass

>>

> c = c(

)>>

> c.foo1(

)我是foo1,我為base1代言

>>

> c.foo2(

)我是foo2,我為base2代言

並不建議使用

python自學筆記

一 字串 單引號定義 s spam len s 求長度 第一位索引從0開始 s 0 s 最後一位也可以從 1開始索引 s 1 m s 2 a 幾個常用到的索引計算方法 s 1 pam 從第乙個一直到最後乙個 s 0 3 spa 從m開始到n 1 不包括n 本例為從0到2 s 3 pam 從第乙個開始...

Java自學抽象類 自學筆記

抽象類是指在類的宣告前加上abstract關鍵字修飾的類。抽象類可以包含常規類能夠包含的任何東西,這包括構造方法,因為子類可能需要呼叫這種構造方法。抽象類可以包含抽象方法,即方法宣告前用abstract修飾的。抽象方法只有方法的宣告沒有方法體 方法實現 非抽象的方法可以有方法體。抽象方法將在子類中被...

python自學筆記9之模組和類

自己寫乙個模組 我們以內建的sys模組為例,編寫乙個hello的模組 author zerof import sys print name is name deftest args sys.argv if len args 1 print hello,world elif len args 2 pr...