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

跟老齊學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條評論
主站蜘蛛池模板: 九九热精品免费视频 | 婷婷在线视频国产综合 | 亚洲国产精品久久卡一 | 国产亚洲福利精品一区二区 | 九九精品视频一区在线 | 美女视频很黄很黄又免费的 | 一级无毛片 | 国产一区二区三区不卡免费观看 | 青青青视频自偷自拍视频1 青青青手机版视频在线观看 | 国产成人精品亚洲777图片 | 亚洲日本久久久午夜精品 | 中文字幕观看 | 日韩国产中文字幕 | 91手机看片国产永久免费 | 修修视频在线观看 | 激情五月开心婷婷 | 久久精品国产亚洲网站 | 国产黄色自拍 | 一道本一区二区三区 | 欧美日韩国产亚洲一区二区 | 在线久草视频 | 福利色姬网站视频入口 | 久久精品影院一区二区三区 | 黄色成人一级片 | 亚洲国产观看 | 国产乱子伦一级毛片 | 奇米影视666 | 国内亚州视频在线观看 | 久久99国产精品一区二区 | 亚洲精品国产第一区二区尤物 | 亚洲国产成人精品一区二区三区 | 99精品在线看 | 欧美成人三级视频 | 欧美大片日韩精品四虎影视 | 精品欧美成人bd高清在线观看 | 中国性xxxxx极品奶水 | 鲁鲁狠色综合色综合网站 | 韩国三日本三级中文字幕 | a一级黄色片 | 99国产精品视频久久久久 | 久久精品免费一区二区三区 |