日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > python >内容正文

python

Python面向对象之继承

發(fā)布時間:2025/3/21 python 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Python面向对象之继承 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

面向?qū)ο笕筇匦?/strong>

  • 封裝 根據(jù)職責(zé)將屬性和方法封裝到一個抽象的類中;
  • 繼承 實現(xiàn)代碼的重用,西安通的代碼不需要重復(fù)的編寫;
  • 多態(tài) 不同的對象調(diào)用相同的方法,產(chǎn)生不同的執(zhí)行結(jié)果,增加代碼的靈活度。
  • 單繼承

    使用繼承前的代碼

    class Animal:def eat(self):print("吃")def sleep(self):print("睡")class Dog:def eat(self):print("吃")def sleep(self):print("睡")def bark(self):print("犬吠")dog = Animal() dog.eat() dog.sleep()jinmao = Dog() jinmao.eat() jinmao.bark()

    雖然可以通過代碼復(fù)制來減少工作量,但代碼重復(fù)卻很多。

    繼承的概念和語法

    繼承的概念:子類擁有父類所有的屬性和方法;

    繼承的語法

    class 類名(父類名):pass
    • 子類繼承自父類,可以直接享用父類中已經(jīng)開發(fā)好的方法,不需要再次開發(fā);
    • 子類中應(yīng)該根據(jù)職責(zé),封裝子類中特有的屬性和方法;

    單繼承示例

    class Animal:def eat(self):print("吃")def run(self):print("跑")def sleep(self):print("睡")class Dog(Animal):def bark(self):print("犬吠")jinmao = Dog() jinmao.eat() # 吃 jinmao.bark() # 叫

    繼承相關(guān)術(shù)語

    子類=派生類;
    父類=基類;
    繼承=派生;

    例如:
    Dog類是Animal類的子類,Animal類是Dog類的父類,Dog類從Animal類繼承;

    繼承的傳遞性

    • C類繼承自B類,B類又繼承自A類;
    • 那么C類就擁有B類和A類所有的屬性和方法;
    • 總結(jié)就是:子類擁有父類及父類的父類的所有封裝的屬性與方法。

    繼承傳遞示例

    class Animal:def eat(self):print("吃")def run(self):print("跑")class Dog(Animal):def bark(self):print("犬吠")class Corgi(Dog):def leg(self):print("腿很短")keji = Corgi() # 子類使用自己的方法 keji.leg() # 子類使用父類的方法 keji.bark() # 子類使用父類的父類的方法 keji.eat()

    繼承傳遞的分支問題

    雖然貓和狗都繼承自動物類,但狗的子類柯基并不能調(diào)用貓類的方法,因為柯基并沒有繼承自貓類;

    方法重寫

    應(yīng)用場景

    • 當(dāng)父類中的方法滿足不了子類的需求時,可以對方法進行重寫;
    • 重寫父類的方法有兩種:
      1.覆蓋父類的方法;
      2.對父類方法進行擴展;

    覆蓋父類的方法

    如果在開發(fā)中,父類的方法實現(xiàn)和子類的方法實現(xiàn),完全不同,就可以使用覆蓋在方法,在子類中重新編寫父類的方法實現(xiàn);

    覆蓋方式:在子類中定義一個和父類重名的方法并且實現(xiàn);

    重寫之后,在運行時,只會調(diào)用子類中重寫的方法,而不會再調(diào)用父類中封裝的方法;

    class Dog(Animal):def bark(self):print("犬吠")class Corgi(Dog):def leg(self):print("腿很短")def bark(self):print("柯基吠")keji = Corgi() # 子類使用自己的方法 keji.leg() # 子類使用重寫父類的方法 keji.bark()

    子類中擴寫父類的方法

    如果在開發(fā)中,子類的方法實現(xiàn),包含了父類的方法實現(xiàn),即原本父類封裝的方法是子類方法的一部分,這時候就可以使用子類擴寫父類的方法。

    擴寫方式:

  • 在子類中重寫父類的方法;
  • 在需要的位置,調(diào)用父類的方法,用super().父類方法名
  • 編寫子類方法其他的代碼
  • 關(guān)于super

  • 在python中,super是一個特殊的類;
  • super()就是使用super類創(chuàng)建出來的對象;
  • 經(jīng)常使用的場景就是,重寫父類方法時,調(diào)用在父類中封裝的方法;
  • 擴寫示例

    class Dog(Animal):def bark(self):print("犬吠")class Corgi(Dog):def leg(self):print("腿很短")def bark(self):# 1.針對子類特有的需求,編寫代碼print("柯基吠")# 2.在需要的位置,調(diào)用父類的方法,用super().父類方法名super().bark()# 3.編寫子類方法其他的代碼print("...")keji = Corgi() # 子類使用自己的方法 keji.leg() # 子類使用 擴展父類的方法 keji.bark()# 腿很短 # 柯基吠 # 犬吠 # ...

    使用父類名調(diào)用父類方法(了解)

    在python2.x中,如果需要調(diào)用父類的方法,還可以用這種方式:

    父類名.方法(self)

    在python3中,仍然支持這種方法,但不推薦使用,因為一旦父類發(fā)生變化,調(diào)用位置的父類名同樣需要修改

    注意:

  • 在開發(fā)中,父類名和super()兩種方法不要混用;
  • 如果使用當(dāng)前子類名調(diào)用方法,會形成遞歸調(diào)用,形成死循環(huán);
  • 使用父類名調(diào)用父類方法示例

    class Dog(Animal):def bark(self):print("犬吠")class Corgi(Dog):def leg(self):print("腿很短")def bark(self):print("柯基吠")# 使用父類名調(diào)用父類方法,不推薦使用Dog.bark(self)# 注意,如果使用子類調(diào)用方法,會出現(xiàn)遞歸調(diào)用,形成死循環(huán)# Corgi.bark(self)print("...")keji = Corgi() keji.leg() keji.bark()# 腿很短 # 柯基吠 # 犬吠 # ...

    多繼承

    多繼承概念和語法

    概念:子類可以具有多個父類,并且具有多個父類的屬性和方法;

    語法:

    class 子類名(父類1,父類2,...):pass

    作用:多繼承可以讓子類同時具有多個父類的屬性和方法;

    多繼承示例

    class A:def test_a(self):print("test_a")class B:def test_b(self):print("test_b")class C(A, B):passc = C()c.test_a() # test_a c.test_b() # test_b

    多繼承注意事項

    • 如果兩個父類之間具有同名屬性或方法,應(yīng)該盡量避免使用多繼承;
    • 如果兩個父類之間具有同名屬性或方法,子類在調(diào)用方法時,會優(yōu)先使用先繼承那個父類的方法;

    多繼承方法調(diào)用順序示例

    class A:def test(self):print("test_a")def demo(self):print("demo_a")class B:def test(self):print("test_b")def demo(self):print("demo_b")class C(A, B):passc = C()c.test() # test_a c.demo() # demo_a

    我們把C的繼承父類順序換一下

    class A:def test(self):print("test_a")def demo(self):print("demo_a")class B:def test(self):print("test_b")def demo(self):print("demo_b")class C(B, A):passc = C()c.test() # test_b c.demo() # demo_b

    MRO--方法搜索順序

    __mro__的作用:在創(chuàng)建對象的類,以及繼承的父類中,查找要調(diào)用的方法的 順序;

    • python中針對類提供了一個內(nèi)置屬性__mro__可以查看方法搜索順序;
    • mro主要用于多繼承時,判斷方法,屬性的調(diào)用順序;

    __mro__方法使用示例

    # 假設(shè)C類繼承自B和A print(C.__mro__) 輸出結(jié)果: # (<class '__main__.C'>, <class '__main__.B'>, <class '__main__.A'>, <class 'object'>)
    • 在搜索方法時,是按照__mro__搜索結(jié)果從左到右的順序查找的;
    • 如果在當(dāng)前類中找到方法,就直接執(zhí)行,不再查找;
    • 如果沒有找到,就查找下一個類中是否有對應(yīng)的方法,如果找到方法,就直接執(zhí)行,不再查找;
    • 如果找到最后一個類,還沒有找到方法,就報錯。

    __mro__方法使用完整示例

    class A:def test(self):print("test_a")def demo(self):print("demo_a")class B:def test(self):print("test_b")def demo(self):print("demo_b")class C(B, A):passc = C()c.test() # test_b c.demo() # demo_b# 確定C類的調(diào)用方法順序 print(C.__mro__) # (<class '__main__.C'>, <class '__main__.B'>, <class '__main__.A'>, <class 'object'>)

    新式類和經(jīng)典(舊式)類

    • 在ipython中,添加了object就是新式類,沒添加就是經(jīng)典類;可以用dir(對象名)查看新式類和經(jīng)典類的內(nèi)置方法;
    • 在ipython3下,就算你沒添加object,python解釋器也會給你加上,默認就是新式類;

    object是python為所有對象提供的基類,提供有一些內(nèi)置的方法和屬性,可以用dir函數(shù)查看,dir(對象名);

    新式類:以object為基類的類,推薦使用;
    經(jīng)典類:不以object為基類的類,不推薦使用;

    • 在python3中定義類時,如果沒有指定父類,會默認使用object作為該類的基類--python3中定義的類都是新式類;
    • 在python2中,定義類時,如果沒有指定父類,則不會以object作為基類;
      新式類和經(jīng)典類在多繼承時,會影響方法的搜索順序;

    為了保證編寫的代碼能同時在python2和python3下運行,以后在定義類時,如果沒有父類,建議統(tǒng)一繼承object類;

    class 類名(object):pass

    在ipython下查看內(nèi)置方法

    查看新式類內(nèi)置方法

    class A(object):passa = A() dir(a)

    查看舊式類內(nèi)置方法

    class B:passb = B() dir(b)

    轉(zhuǎn)載于:https://www.cnblogs.com/yifchan/p/python-1-14.html

    總結(jié)

    以上是生活随笔為你收集整理的Python面向对象之继承的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: 国产精品第九页 | 国产亚洲精品aaaaaaa片 | 三级视频小说 | 毛片动漫 | 亚洲成a人无码 | 国产成人精品女人久久久 | 久久久激情网 | 99国产精品久久久久久久成人 | 国产精品黑人一区二区三区 | 亚洲一级二级片 | 在线黄色av | 玖玖999| 999国产精品视频 | 日本国产一级片 | 在线免费观看视频a | 吊视频一区二区三区 | 国产ts人妖系列高潮 | 最新中文字幕免费 | 中文字幕无码av波多野吉衣 | 欧美一级免费在线 | 操碰人人| 亚洲色欲色欲www在线观看 | 毛片毛片 | 人妻少妇偷人精品久久久任期 | 国产明星换脸xxxx色视频 | 国产午夜精品一区二区三区欧美 | 日本韩国视频 | 欧美日韩久久婷婷 | 91麻豆影视 | 交视频在线播放 | 日韩精品免费一区二区夜夜嗨 | 亚洲成av人片一区二区 | 极品美女无套呻吟啪啪 | 一区二区三区在线免费 | 国产精品亚洲AV色欲三区不卡 | а 天堂 在线 | 国产无精乱码一区二区三区 | 人人艹人人爽 | 精品一区二区av | 欧美精品动漫 | 国内精品人妻无码久久久影院蜜桃 | 婷婷亚洲五月 | 动漫女生光屁股 | 777精品伊人久久久久大香线蕉 | 91成人小视频 | 天天摸天天舔 | 国产女教师一区二区三区 | 黑人干亚洲女 | 国产又粗又硬视频 | 女人av| 亚洲二区在线播放视频 | 视频一区二区三区精品 | 国产九九在线 | 99中文字幕在线观看 | 销魂美女一区二区 | 欧美色狠 | 欧美肥妇bwbwbwbxx | 乳罩脱了喂男人吃奶视频 | 精品乱码久久久久久中文字幕 | 三级中文字幕 | 四虎少妇做爰免费视频网站四 | 日本精品久久 | 91亚洲精品国偷拍 | 午夜时刻免费入口 | 99ri国产精品| 夜夜添无码一区二区三区 | 国产av精国产传媒 | 在线观看免费观看 | 久一在线| 欧美高清视频 | 五月深爱网 | 无码少妇一级AV片在线观看 | 黄色激情在线 | 久久婷婷影视 | 国产综合久久久久 | 国产精品欧美一区二区三区 | 色哟哟精品观看 | 亚洲色精品三区二区一区 | 亚洲精品综合在线观看 | av第下页 | 亚洲av无码专区在线电影 | 亚洲一区二区三区四区在线观看 | av网站在线免费观看 | 亚洲精品a区 | 日韩黄片一区二区三区 | 欧美黄色三级视频 | 99er久久| 夜操操 | 日韩专区在线 | 亚洲视频欧美 | 国产第一页屁屁影院 | 日本在线激情 | 免费日韩在线 | 欧美日韩一区二区视频观看 | 国产三级理论片 | 国产高清露脸 | аⅴ资源天堂资源库在线 | 日本一级淫片色费放 | 黑人借宿巨大中文字幕 |