python 類的繼承

2021-09-19 19:27:47 字數 3702 閱讀 8535

看這個程式:

#!/usr/bin/env python

#coding:utf-8

class person:

def __init__(self, name, email):

self.name = name

self.email = email

class programmer(person):

def __init__(self, name,email,lang, system, website):

person.__init__(self,name,email)

self.lang = lang

self.system = system

self.website = website

class pythoner(programmer):

def __init__(self,name,email):

programmer.__init__(self,name,email,"python","ubuntu","hiekay.github.io")

if __name__=="__main__":

writer = pythoner("hiekay","[email protected]")

print "name=",writer.name

print "lang=",writer.lang

print "email=",writer.email

print "system=",writer.system

print "website=",writer.website

#執行結果

name= hiekay

lang= python

email= [email protected]

system= ubuntu

website= hiekay.github.io

對結果很滿意,再看程式中的繼承關係:pythoner <-- programmer <-- person,從上面的過程中不難看出,繼承能夠減少**重複,是的**更簡練。另外,在繼承的時候,也可以在函式中對引數進行預設賦值。

為了能夠突出繼承問題的**,還是用那種簡單的類來做實驗。

#!/usr/bin/env python

#coding:utf-8

class a:

def __init__(self):

print "aaa"

class b(a):

pass

if __name__=="__main__":

a = a()

b = b()

#執行結果

aaaaaa

b繼承a,沒有任何修改地繼承,b就可以不用寫任何東西了,或者說b本質上就是乙個多餘。在真實的程式設計過程中,沒有這樣寫的。

##首個繼承有效

#!/usr/bin/env python

#coding:utf-8

class a:

def __init__(self):

print "aaa"

class b:

def __init__(self):

print "bbb"

class c1(a,b):

pass

class c2(b,a):

pass

if __name__=="__main__":

print "a--->",

a = a()

print "b--->",

b = b()

print "c1(a,b)--->",

c1 = c1()

print "c2(b,a)--->",

c2 = c2()

#執行結果

a---> aaa

b---> bbb

c1(a,b)---> aaa

c2(b,a)---> bbb

注意,類c1繼承了兩個類a,b;類c2也繼承了兩個類,只不過書寫順序有點區別(b,a)。從執行結果可以看出,當子類繼承多個父類的時候,對於建構函式__init__(),只有第乙個能夠被繼承,第二個就等掉了。所以,一般情況下,不會在程式中做關於建構函式的同時多個繼承,不過可以接力繼承,就如同前面那個比較真實的**一樣。

#!/usr/bin/env python

#coding:utf-8

class a:

def __init__(self):

print "aaa"

def amethod(self):

print "method a"

class b(a):

def __init__(self):

print "bbb"

if __name__=="__main__":

print "a--->"

a = a()

a.amethod()

print "b--->"

b = b()

b.amethod()

#執行結果

a--->

aaamethod a

b--->

bbbmethod a

a的例項和呼叫,就不多說了。重點看b,類b繼承了a,同時,b在建構函式中自己做了規定,也就是b的建構函式是按照b的意願執行,不執行a的內容,但是,a還有乙個amethod(self)方法,b則繼承了這個方法。當通過類b的例項呼叫這個方法的時候,就能夠成功了:b.amethod()

這就是方法的繼承和呼叫方法。

所謂繼承,就是從下到上一級一級地找相應的繼承物件,找到了就繼承之。如果有同名的怎麼辦?按照什麼順序找呢?

應用網上的一段:

在python中,可以進行多重繼承,這個時候要注意搜尋的順序,是從子類別開始,接著是同一階層父類別由左至右搜尋,再至更上層同一階層父類別由左至右搜尋,直到達到頂層為止。

**舉例:

#!/usr/bin/env python

#coding:utf-8

class a(object):

def method1(self):

print('a.method1')

def method2(self):

print('a.method2')

class b(a):

def method3(self):

print('b.method3')

class c(a):

def method2(self):

print('c.method2')

def method3(self):

print('c.method3')

class d(b, c):

def method4(self):

print('c.method4')

d = d()

d.method4() # 在 d 找到,c.method4

d.method3() # 以 d->b 順序找到,b.method3

d.method2() # 以 d->b->c 順序找到,c.method2

d.method1() # 以 d->b->c->a 順序找到,a.method1

務必請真正的學習者要對照每個類的每個方法,依次找到相應的輸出結果。從而理解繼承的順序。學習,就要點滴積累。

python 類 繼承 python 類的繼承

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

Python 類的繼承

有兩個模組 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 sel...

Python 類的繼承

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