Python 類的繼承

2021-07-03 18:26:59 字數 3216 閱讀 7784

有兩個模組 file1.py 和 file2.py

file2中有個基類base

def

abc(self):

return

"function-abc and name: " + self

class

base

(object):

def__init__

(self, name):

self.name = name

defrun(self):

return abc(self.name)

file1中的child類繼承自 file2.base

from file2 import base

class

child

(base):

def__init__

(self, name=none):

ifnot name:

name = 't1-name'

super(child, self).__init__(name)

defrun(self):

return base.run(self)

print child().run()

結果:function-abc and name: t1-name

即使file1中沒有函式abc,因為匯入的其他模組的類中關聯了其他模組中的函式,在file1中是可以執行到的。

但是如果重寫了子類的方法,並沒有呼叫父類的,而是重新呼叫了其他模組的函式,那麼便會導致找不到屬性,因為file1模組中並沒有定義函式abc()

class

child

(base):

defrun

(self):

# return base.run(self)

return abc(self.name) # error

#file2.base

defabc

(self):

return

"function-abc and name: " + self

class

base

(object):

def__init__

(self, name):

self.name = name

defrun(self):

# 下面兩個是child的類屬性和例項屬性,但是基類也能執行,

# 即使子類沒有重寫run方法,進行base.run(self),基類也還是

# 能找到子類的屬性。

print self.classattr

print self.inattr

return abc(self.name)

#file1.child

from file2 import base

class

child

(base):

classattr = 'child class attr...'

def__init__

(self, name=none):

self.inattr = "child instance attr..."

ifnot name:

name = 't1-name'

super(child, self).__init__(name)

defrun(self):

return base.run(self)

print child().run()

# child class attr...

# child instance attr...

# function-abc and name: t1-name

再來看乙個例子:

# file1.base

class

base

(object):

classattr = 'base class attr'

def__init__

(self):

self.inattr = 'base instance attr'

return self.handler()

defhandler

(self):

pass

defsetup

(self):

return

"base.setup method"

# file2.child

from file1 import base

class

child

(base):

classattr = 'child class attr'

def__init__

(self):

super(child, self).__init__()

self.inattr = "child instance attr"

defhandler

(self):

print self.inattr

print

'child.handler method'

print self.setup()

defsetup

(self):

return

"child.setup method"

print child()

結果:child instance attr

child.handler method

child.setup method

<__main__.child object at 0x7fca2e946890>

子類中初始化了父類的init,所以執行了父類的init中的return self.handler()

而子類中重寫了handler方法,所以執行了子類的handler方法。

因為子類初始化中的self.inattr = "child instance attr"寫在super之後,所以覆蓋了父類的例項屬性self.inattr

子類中的handler最後執行了setup方法,setup被子類child重寫,如果子類中沒有重寫,那麼便會去找父類中setup方法。

python 類 繼承 python 類的繼承

1 所用的類都可以被繼承 2 沒有繼承其他類的類必然有乙個父類 object 3子類可以擁有父類的 init 裡的類容 派生子類除了父類的一些屬性,還會有自己的屬性和方法,這些就叫派生 如何使用 實現 class animal def init self,name,attack,hp self.na...

Python 類的繼承

python中類的繼承,子類擁有繼承父類的方法和屬性,這一點上,與object c中是一樣的,整體上python語法和object c語法很想,但是swift與python這兩者是更像的語法上class parent 定義父類 parentattr 100 def init self print 呼...

python 類的繼承

1.python繼承父類,子類可以呼叫父類的方法,也可以呼叫自己的方法。class person object 定義乙個父類 def talk self 父類中的方法 print person is talking.class chinese person 定義乙個子類,繼承person類 def ...