色婷婷AⅤ一区二区三区|亚洲精品第一国产综合亚AV|久久精品官方网视频|日本28视频香蕉

          "); //-->

          博客專欄

          EEPW首頁(yè) > 博客 > 在 Python 中如何實(shí)現(xiàn)類的繼承,方法重載及重寫?

          在 Python 中如何實(shí)現(xiàn)類的繼承,方法重載及重寫?

          發(fā)布人:AI科技大本營(yíng) 時(shí)間:2022-06-19 來(lái)源:工程師 發(fā)布文章
          作者 | 蘇涼.py

          來(lái)源 | CSDN博客今天我們將進(jìn)入類的繼承以及對(duì)類的方法重寫及重載的學(xué)習(xí)!話不多說(shuō)直接進(jìn)入正題?。?/span>

          圖片

          類的繼承


          如果要編寫的類是另一個(gè)現(xiàn)成類的特殊版本,那我們就可以使用繼承。一個(gè)類繼承另一個(gè)類時(shí),將自動(dòng)獲得另一個(gè)類的所有屬性和方法,原有的類稱為父類,而新的類稱為子類,子類繼承父類的所有屬性和方法,同時(shí)還可以定義自己的屬性和方法。繼承的特點(diǎn)

          • 如果在子類中需要父類的構(gòu)造方法就需要調(diào)用父類的構(gòu)造方法,或者不重寫父類的構(gòu)造方法。
          • 在調(diào)用父類的方法時(shí),需要加上父類的類名前綴,且需要帶上 self 參數(shù)變量。區(qū)別在于類中調(diào)用普通函數(shù)時(shí)并不需要帶上 self 參數(shù)。
          • Python 總是首先查找對(duì)應(yīng)類型的方法,如果它不能在子類中找到對(duì)應(yīng)的方法,它才開(kāi)始到父類中逐個(gè)查找。(先在子類中查找調(diào)用的方法,找不到才去夫類中找)。

          子類不重寫__ init __ 的繼承(子類需要自動(dòng)調(diào)用父類的方法)子類不重寫 __ init __,實(shí)例化子類時(shí),會(huì) 自動(dòng)調(diào)用父類定義的 __ init __。



















          # 創(chuàng)建一個(gè)父類class Base_father:    def __init__(self,name,age):        self.name = name        self.age = age        print('調(diào)用了父類的name')

          # 創(chuàng)建子類class Base_son(Base_father):
             def getname(self):        print(f'姓名:{self.name}')        print(f'年齡:{self.age}')        return '運(yùn)行完畢??!'
          num1 = Base_son('suliang',21)print(num1.getname())

          運(yùn)行結(jié)果:

          圖片

          在子類中沒(méi)有重寫 __ init __方法,在調(diào)用子類進(jìn)行實(shí)例化時(shí),就默認(rèn)調(diào)用父類的 __ init __ 方法。

          子類重寫__ init __ 的繼承(子類不需要自動(dòng)調(diào)用父類的方法)

          如果重寫了__ init __ 時(shí),實(shí)例化子類,就不會(huì)調(diào)用父類已經(jīng)定義的 __ init __。



















          # 創(chuàng)建一個(gè)父類class Base_father:    def __init__(self,name,age):        self.name = name        self.age = age        print('調(diào)用了父類的name')
          # 創(chuàng)建子類class Base_son(Base_father):    def __init__(self,name,age):        self.name = name        self.age = age        print('調(diào)用了我自己定義的方法??!')
             def getname(self):        print(f'姓名:{self.name}')        print(f'年齡:{self.age}')        return '運(yùn)行完畢??!'
          num1 = Base_son('suliang',21)print(num1.getname())

          運(yùn)行結(jié)果:圖片通過(guò)上面兩個(gè)例子就可以清楚的看到,若是子類自己定義了一個(gè)初始化方法 __ init __,那么將不在調(diào)用父類已經(jīng)調(diào)用好的 __ init __ 方法。

          子類重寫 __init __ ,并且繼承父類的構(gòu)造方法(super)



          如果重寫了__ init __ 時(shí),要繼承父類的構(gòu)造方法,可以使用 super關(guān)鍵字。語(yǔ)法:super(子類,self).__ init __(參數(shù))

























          # 創(chuàng)建一個(gè)父類class Base_father:    def __init__(self,name,age):        self.name = name        self.age = age        print('調(diào)用了父類的name')
          # 創(chuàng)建子類class Base_son(Base_father):    def __init__(self,name,age):      #利用super調(diào)用父類的構(gòu)造函數(shù)        super(Base_son, self).__init__(name ,age)        print('-'*50)        self.name = name        self.age = age        print('調(diào)用了我自己定義的方法??!')

             def getname(self):        print(f'姓名:{self.name}')        print(f'年齡:{self.age}')        return '運(yùn)行完畢??!'
          num1 = Base_son('suliang',21)print(num1.getname())
          運(yùn)行結(jié)果:圖片
          圖片

          方法的重寫及重載


          重寫

          子類對(duì)父類的允許訪問(wèn)的方法的實(shí)現(xiàn)過(guò)程進(jìn)行重新編寫, 返回值和形參都不能改變。優(yōu)點(diǎn):子類可以根據(jù)需要,定義特定于自己的行為。也就是說(shuō)子類能夠根據(jù)需要實(shí)現(xiàn)父類的方法。重載重載(overloading) 是在一個(gè)類里面,方法名字相同,而參數(shù)不同。返回類型可以相同也可以不同。每個(gè)重載的方法(或者構(gòu)造函數(shù))都必須有一個(gè)獨(dú)一無(wú)二的參數(shù)類型列表。二者區(qū)別

          1. 方法重載是一個(gè)類中定義了多個(gè)方法名相同,而他們的參數(shù)的數(shù)量不同或數(shù)量相同而類型和次序不同,則稱為方法的重載。
          2. 方法重寫是在子類存在方法與父類的方法的名字相同,而且參數(shù)的個(gè)數(shù)與類型一樣,返回值也一樣的方法,就稱為重寫。
          3. 方法重載是一個(gè)類的多態(tài)性表現(xiàn),而方法重寫是子類與父類的一種多態(tài)性表現(xiàn)。

          對(duì)方法重寫如果父類方法的功能不能滿足你的需求,就可以在子類重寫你父類的方法。















          class Father:    def __init__(self,name):        self.name = name
             def list(self):        print(f'name:{self.name}')
          class Son(Father):    def list(self):        print(f'姓名:{self.name}')        return  '執(zhí)行完畢??!'
          num1 = Son('suliang')print(num1.list())

          運(yùn)行結(jié)果:

          圖片

          基礎(chǔ)重載方法

          • 構(gòu)造函數(shù)

          __ init __ ( self [,args] )

          • 析構(gòu)方法,刪除一個(gè)對(duì)象

          __ del __( self )

          • 轉(zhuǎn)化為供解釋器讀取的形式

          __ repr __( self )

          • 用于將值轉(zhuǎn)化為適于人閱讀的形式

          __ str __( self )

          • 對(duì)象比較

          __ cmp __ ( self, x )

          方法重載的具體方法將在下一章進(jìn)行詳細(xì)介紹。在此之作簡(jiǎn)單說(shuō)明??!
          圖片類的屬性和方法()

          類的私有屬性

          在定義類的屬性時(shí),在前面加入__(兩個(gè)下劃線)即代表私有屬性,只能在類的內(nèi)部調(diào)用,而不能在外部調(diào)用。








          class List:    a = 5 #類的公有屬性    __b = 6 #類的私有屬性
          obj = List()print(obj.a)print(obj.__b)

          運(yùn)行結(jié)果:

          圖片

          類的私有方法

          在定義方法時(shí),在前面加入 __ (兩個(gè)下劃線)即可定義一個(gè)私有方法,只能在類的內(nèi)部調(diào)用,語(yǔ)法為self.__方法名




















          class List:    def __init__(self ,a,b ):        self.a = a        self.b =b    def pri1(self):        # 定義一個(gè)公有方法        print(f'{self.a + self.b}')        return '  '    def __pri2(self):        # 定義一個(gè)私有方法        print(f'{self.a *self.b}')
             def pri3(self):        self.__pri2()  # 在內(nèi)部調(diào)用私有方法        return '  '
          obj = List(5,10)print(obj.pri1())print(obj.pri3())

          運(yùn)行結(jié)果:

          圖片


          圖片

          面向?qū)ο笾邢聞澗€的說(shuō)明


          _前面單下劃線

          以單下劃線開(kāi)頭的表示的是 protected 類型的變量,即保護(hù)類型只能允許其本身與子類進(jìn)行訪問(wèn)。

          _前面雙下劃線

          雙下劃線的表示的是私有類型(private)的變量, 只能是允許這個(gè)類本身進(jìn)行訪問(wèn)了。

          _前面雙下劃線_定義的是特殊方法,一般是系統(tǒng)定義名字 ,類似 __ init __() 之類的。


          圖片

          小結(jié)


          本篇文章帶大家了解了類的繼承,方法的重寫以及重載的內(nèi)容。一頓操作下來(lái)是不是覺(jué)得并不難呢,當(dāng)然這都是基礎(chǔ)語(yǔ)法,深入的還需大家理解這其中的內(nèi)涵,再慢慢的去實(shí)踐。


          *博客內(nèi)容為網(wǎng)友個(gè)人發(fā)布,僅代表博主個(gè)人觀點(diǎn),如有侵權(quán)請(qǐng)聯(lián)系工作人員刪除。



          關(guān)鍵詞: 算法

          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉