python中重寫和特殊構造方法

2021-07-27 08:46:19 字數 1644 閱讀 4081

class

bird:

def__init__

(self):

self.hungry = true

defeat

(self):

if self.hungry:

print

'ahaaaaa...'

self.hungry = false

else:

print

'no, thanks!'

class

somebird

(bird):

def__init__

(self):

self.song = 'squawk'

defsing

(self):

print self.song

sb = somebird()

sb.sing()

sb.eat()

函式程式執行結果:

squawk

traceback (most recent call

last):

file "class.py", line 19, in

sb.eat()

file "class.py", line 5, in eat

if self.hungry:

attributeerror: somebird instance has no attribute 'hungry'

在上面的函式中先定義了乙個brid類,該類中呼叫構造方法對hungry進行初始化。而後又定義它的子類somebird,該子類又呼叫構造方法進行初始化,這樣會導致該構造方法進行重寫,也就是說重寫後只有song屬性,沒有hungry屬性

class

bird:

def__init__

(self):

self.hungry = true

defeat

(self):

if self.hungry:

print

'ahaaaaa...'

self.hungry = false

else:

print

'no, thanks!'

class

somebird

(bird):

def__init__

(self):

bird.__init__(self)

self.song = 'squawk'

defsing

(self):

print self.song

sb = somebird()

sb.sing()

sb.eat()

程式執行結果:

squawk

ahaaaaa...

可以看到子類也擁有了父類的屬性。

而在一般情況下,呼叫乙個例項的方法時,該方法的引數會被自動繫結到例項上。

而上面的方法是一種「未繫結(unbound)」的方法,也就是說呼叫類的方法進行初始化,可以自由的提供需要的self引數。

參考《python基礎教程 p140-142》

java中父類建構函式中呼叫子類重寫的方法

第乙個例子 class a 該建構函式自始至終就沒有被呼叫過 public void print class b extends a 重寫父類中的print 函式 public void print public class main 輸出 null asdg 總結 1.初始化c2 時,先初始化c2...

構造方法 重寫 和 過載

構造方法 是一種特殊的方法。主要用來在建立物件時初始化物件,即為物件成員變數賦初始值,總與new運算子一起使用在建立物件的語句中。類可以有多個建構函式,可根據其引數個數的不同或引數型別的不同來區分它們,即建構函式的過載。重寫 當乙個子類繼承乙個父類,而子類中的方法與父類中的方法的名稱,引數個數 型別...

重寫和繼承關係中的構造方法

2.方法重寫必須滿足的需求 重寫方法和被重寫方法必須具有相同的方法名。重寫方法和被重寫方法必須具有相同的引數列表。重寫方法的返回值型別必須和被重寫方法的返回值型別相同或是其子類。重寫方法不能縮小被重寫方法的訪問許可權。3.過載和重寫的區別聯絡 過載設計同乙個類中的同方法名,要求方法名相同,引數列表不...