博客專欄

        EEPW首頁 > 博客 > 在 Python 中如何實現類的繼承,方法重載及重寫?

        在 Python 中如何實現類的繼承,方法重載及重寫?

        發布人:AI科技大本營 時間:2022-06-19 來源:工程師 發布文章
        作者 | 蘇涼.py

        來源 | CSDN博客今天我們將進入類的繼承以及對類的方法重寫及重載的學習!話不多說直接進入正題!!

        圖片

        類的繼承


        如果要編寫的類是另一個現成類的特殊版本,那我們就可以使用繼承。一個類繼承另一個類時,將自動獲得另一個類的所有屬性和方法,原有的類稱為父類,而新的類稱為子類,子類繼承父類的所有屬性和方法,同時還可以定義自己的屬性和方法。繼承的特點

        • 如果在子類中需要父類的構造方法就需要調用父類的構造方法,或者不重寫父類的構造方法。
        • 在調用父類的方法時,需要加上父類的類名前綴,且需要帶上 self 參數變量。區別在于類中調用普通函數時并不需要帶上 self 參數。
        • Python 總是首先查找對應類型的方法,如果它不能在子類中找到對應的方法,它才開始到父類中逐個查找。(先在子類中查找調用的方法,找不到才去夫類中找)。

        子類不重寫__ init __ 的繼承(子類需要自動調用父類的方法)子類不重寫 __ init __,實例化子類時,會 自動調用父類定義的 __ init __。



















        # 創建一個父類class Base_father:    def __init__(self,name,age):        self.name = name        self.age = age        print('調用了父類的name')

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

        運行結果:

        圖片

        在子類中沒有重寫 __ init __方法,在調用子類進行實例化時,就默認調用父類的 __ init __ 方法。

        子類重寫__ init __ 的繼承(子類不需要自動調用父類的方法)

        如果重寫了__ init __ 時,實例化子類,就不會調用父類已經定義的 __ init __。



















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

        運行結果:圖片通過上面兩個例子就可以清楚的看到,若是子類自己定義了一個初始化方法 __ init __,那么將不在調用父類已經調用好的 __ init __ 方法。

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



        如果重寫了__ init __ 時,要繼承父類的構造方法,可以使用 super關鍵字。語法:super(子類,self).__ init __(參數)

























        # 創建一個父類class Base_father:    def __init__(self,name,age):        self.name = name        self.age = age        print('調用了父類的name')
        # 創建子類class Base_son(Base_father):    def __init__(self,name,age):      #利用super調用父類的構造函數        super(Base_son, self).__init__(name ,age)        print('-'*50)        self.name = name        self.age = age        print('調用了我自己定義的方法!!')

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

        方法的重寫及重載


        重寫

        子類對父類的允許訪問的方法的實現過程進行重新編寫, 返回值和形參都不能改變。優點:子類可以根據需要,定義特定于自己的行為。也就是說子類能夠根據需要實現父類的方法。重載重載(overloading) 是在一個類里面,方法名字相同,而參數不同。返回類型可以相同也可以不同。每個重載的方法(或者構造函數)都必須有一個獨一無二的參數類型列表。二者區別

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

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















        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  '執行完畢!!'
        num1 = Son('suliang')print(num1.list())

        運行結果:

        圖片

        基礎重載方法

        • 構造函數

        __ init __ ( self [,args] )

        • 析構方法,刪除一個對象

        __ del __( self )

        • 轉化為供解釋器讀取的形式

        __ repr __( self )

        • 用于將值轉化為適于人閱讀的形式

        __ str __( self )

        • 對象比較

        __ cmp __ ( self, x )

        方法重載的具體方法將在下一章進行詳細介紹。在此之作簡單說明!!
        圖片類的屬性和方法()

        類的私有屬性

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








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

        運行結果:

        圖片

        類的私有方法

        在定義方法時,在前面加入 __ (兩個下劃線)即可定義一個私有方法,只能在類的內部調用,語法為self.__方法名




















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

        運行結果:

        圖片


        圖片

        面向對象中下劃線的說明


        _前面單下劃線

        以單下劃線開頭的表示的是 protected 類型的變量,即保護類型只能允許其本身與子類進行訪問

        _前面雙下劃線

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

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


        圖片

        小結


        本篇文章帶大家了解了類的繼承,方法的重寫以及重載的內容。一頓操作下來是不是覺得并不難呢,當然這都是基礎語法,深入的還需大家理解這其中的內涵,再慢慢的去實踐。


        *博客內容為網友個人發布,僅代表博主個人觀點,如有侵權請聯系工作人員刪除。



        關鍵詞: 算法

        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 高安市| 和田县| 淳安县| 潞西市| 金秀| 崇左市| 莱西市| 都匀市| 铜陵市| 彭山县| 崇明县| 莱阳市| 镇巴县| 山丹县| 色达县| 若羌县| 赞皇县| 达尔| 新闻| 临沧市| 屯昌县| 栖霞市| 利川市| 阿拉善左旗| 龙门县| 上饶市| 正镶白旗| 台中县| 伊川县| 长阳| 安徽省| 香港 | 张家界市| 临潭县| 揭阳市| 静乐县| 封开县| 西乡县| 曲沃县| 阿城市| 井冈山市|