亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

跟老齊學Python之編寫類之四再論繼承

系統 1714 0

在上一講代碼的基礎上,做進一步修改,成為了如下程序,請看官研習這個程序:

復制代碼 代碼如下:

#!/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","qiwsir.github.io")

if __name__=="__main__":
??? writer = Pythoner("qiwsir","qiwsir@gmail.com")
??? print "name=",writer.name
??? print "lang=",writer.lang
??? print "email=",writer.email
??? print "system=",writer.system
??? print "website=",writer.website

#運行結果

name= qiwsir
lang= python
email= qiwsir@gmail.com
system= Ubuntu
website= qiwsir.github.io

?對結果很滿意,再看程序中的繼承關系:Pythoner <-- Programmer <-- Person,從上面的過程中不難看出,繼承能夠減少代碼重復,是的代碼更簡練。另外,在繼承的時候,也可以在函數中對參數進行默認賦值。

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

多余的B

復制代碼 代碼如下:

#!/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()

#運行結果

aaa
aaa

?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--->
aaa
method a
B--->
bbb
method a

?為了說明白上面的情況,還是畫了一張圖,不過,我畫完之后,就后悔了,看這張圖好像更糊涂了。怎么著也畫了,還是貼出來,如果能夠協助理解更好了。

跟老齊學Python之編寫類之四再論繼承_第1張圖片

A的實例和調用,就不多說了。重點看B,類B繼承了A,同時,B在構造函數中自己做了規定,也就是B的構造函數是按照B的意愿執行,不執行A的內容,但是,A還有一個amethod(self)方法,B則繼承了這個方法。當通過類B的實例調用這個方法的時候,就能夠成功了:b.amethod()

這就是方法的繼承和調用方法。

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

應用網上的一段:

在Python中,可以?M行多重?^承,?@???r候要注意搜?さ捻?序,是?淖宇??e?_始,接著是同一?A?癰割??e由左至右搜?ぃ?再至更上?油?一?A?癰割??e由左至右搜?ぃ?直到?_到???櫓埂?

代碼舉例:

復制代碼 代碼如下:

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

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


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 成人精品视频在线观看 | 国产精品九九免费视频 | 91精品国产综合久久久久 | 在线免费国产视频 | 亚洲一区在线视频 | 最新69成人精品毛片 | 国产欧美一区二区三区视频 | 国产欧美视频在线观看 | 欧美片欧美日韩国产综合片 | 精品一区二区久久久久久久网站 | 久久大胆视频 | 亚洲线精品久久一区二区三区 | 色综合天天综合网站中国 | 色综合国产| 99涩涩| 久久精品国1国二国三在 | 国产欧美日韩一区 | 精品中文字幕一区在线 | 久久无码精品一区二区三区 | 夜色成人影院在线www | 全免费一级毛片在线播放 | 8050午夜一级全黄毛片 | 国产欧美精品一区aⅴ影院 国产欧美精品一区二区 | 99热这里有免费国产精品 | 一级特黄特黄毛片欧美的 | 成人黄色片视频 | 毛片基地免费视频a | 精品国产一区二区三区2021 | 奇米影视777888| 一级特黄aaa大片免费看 | 欧美日韩国产高清视频 | 高清午夜毛片 | 日本人在线看片 | 一级特黄a免费大片 | 成人牲交一极毛片 | 久久青草免费线观最新 | 欧美在线免费观看视频 | 九九视频只有精品 | 2020国产成人免费视频 | 老妇综合久久香蕉蜜桃 | 国产伦精品一区二区三区在线观看 |