国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

python 面向對象之繼承

這篇具有很好參考價值的文章主要介紹了python 面向對象之繼承。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

python 面向對象之繼承,python,python,開發(fā)語言

前言

前面我們已經學習了 python 面向對象的類和對象,那么今天我將為大家分享面向對象的三大特性之一:繼承。

繼承具有以下特性:

  1. 代碼重用:繼承允許我們創(chuàng)建一個新的類,并從一個或多個現有的類中繼承屬性和方法。這使得我們可以避免重復編寫相同的代碼,提高代碼的重用性。通過繼承,我們可以在基類的基礎上構建更特定和具體的子類。

  2. 擴展功能:通過繼承,我們可以在基類的基礎上添加新的屬性和方法,以實現對基類功能的擴展。這樣,我們可以在不修改基類代碼的情況下,通過子類來定制或擴展特定的行為。這種靈活性使得我們能夠輕松地適應不斷變化的需求。

  3. 組織和抽象概念:通過繼承,我們可以組織類之間的關系,并以更抽象的方式來表達概念和邏輯。通過將共同的屬性和方法放在基類中,我們可以更清晰地表達類之間的關系和層次結構。這種抽象化的設計能夠提高代碼的可讀性和可維護性。

  4. 實現多態(tài)性:繼承也為實現多態(tài)性(Polymorphism)提供了基礎。多態(tài)性是面向對象編程中非常重要的概念,它可以讓我們使用統(tǒng)一的方式處理不同的對象類型。通過繼承,我們可以創(chuàng)建不同的子類,它們共享相同的基類接口,但可能有不同的實現方式。這樣,我們可以根據具體的對象類型來調用適當的方法,實現更靈活和可擴展的程序設計。

學習好了繼承,可以為后面的抽象和多態(tài)打好基礎,那么就由我?guī)ьI大家走進 python 繼承的世界吧。??????

繼承的概念

在生活中,繼承通常是指子女繼承父母的財產。但是在 python 中稍有區(qū)別,兩個具有一定關系的子類和父類,子類會繼承父類的所有除了私有的屬性和方法。我們可以訪問以及修改繼承來的屬性和方法。

在 python 中使用 class 子類名(父類名): 來表示繼承關系。

class Animal():
    def __init__(self):
        self.info = '動物'

    def func(self):
        print(f'屬于{self.info}')

class Cat(Animal):
    pass  # 這里pass是占位符,防止報錯

cat = Cat()
cat.func()  # 屬于動物

繼承可以很大程度的提高代碼的復用率,提高代碼的簡潔性。

在python中,其實每一個類都默認繼承一個 object 基類

單繼承

一個類可以只繼承一個類,這種繼承關系叫做單繼承。

class Master():
    def __init__(self):
        self.wugong = '太極'

    def func(self):
        print(f'身懷絕技:{self.wugong}')

class Prentice(Master):
    pass

zhangsan = Prentice()
zhangsan.func()  # 身懷絕技:太極

多繼承

一個類也可以繼承多個父類,這種繼承關系叫做多繼承。

class Master2():
    def __init__(self):
        self.wugong = '閃電五連鞭'

    def func(self):
        print(f'身懷絕技:{self.wugong}')

class Prentice(Master1,Master2):
    pass

zhangsan = Prentice()
zhangsan.func()

python 面向對象之繼承,python,python,開發(fā)語言
當我們一個繼承多個父類的時候,如果沒有特地指明,默認使用第一個繼承的父類的屬性和方法。

如果我們想要查看該類的繼承關系,我們可以使用 __mro__ 來查看繼承關系。

print(Prentice.__mro__)

python 面向對象之繼承,python,python,開發(fā)語言

子類重寫父類的同名方法和屬性

子類繼承父類的屬性和方法,不可能原封不動的繼承,子類也可以具有自己的特性。那么這里就需要用到 重寫 的方法了。

class Master1():
    def __init__(self):
        self.wugong = '太極'

    def func(self):
        print(f'身懷絕技:{self.wugong}')

class Master2():
    def __init__(self):
        self.wugong = '閃電五連鞭'

    def func(self):
        print(f'身懷絕技:{self.wugong}')

class Prentice(Master1,Master2):
    def __init__(self):
        self.wugong = '太極+輕功'

    def func(self):
        print(f'身懷絕技:{self.wugong}')

zhangsan = Prentice()
zhangsan.func()  # 身懷絕技:太極+輕功

子類調用父類同名的方法和屬性

當我們在子類中調用和父類具有相同名字的屬性和方法的時候,默認會調用子類具有的屬性和方法。

class Master1():
    def __init__(self):
        self.wugong = '太極'

    def func(self):
        print(f'身懷絕技:{self.wugong}')

class Master2():
    def __init__(self):
        self.wugong = '閃電五連鞭'

    def func(self):
        print(f'身懷絕技:{self.wugong}')

class Prentice(Master1,Master2):
    def __init__(self):
        self.wugong = '火星大力拳'

    def func(self):
        print(f'身懷絕技:{self.wugong}')

zhangsan = Prentice()
zhangsan.func()  # 身懷絕技:火星大力拳

那么如果我們要在父類中調用具有同名的父類的屬性和方法該怎么做呢?

  • 如果是先調用了父類的屬性和方法,父類的屬性和方法會覆蓋子類的屬性和方法,所以如果我們想要使用子類自己的屬性和方法,需要調用子類自己的初始化方法。
  • 如果我們想要在子類中調用父類的屬性和方法,我們也需要先調用父類的初始化方法。

先調用父類的初始化方法,然后再使用 父類類名.方法(self) 來調用父類的方法。

class Master():
    def __init__(self):
        self.wugong = '太極'

    def func(self):
        print(f'身懷絕技:{self.wugong}')

class Prentice(Master):
    def __init__(self):
        self.wugong = '閃電五連鞭'

    def func(self):
        print(f'身懷絕技:{self.wugong}')

    def func1(self):
        Master.__init__(self)  # 調用父類的初始化方法
        Master.func(self)

    def func2(self):
        self.func()

zhangsan = Prentice()
zhangsan.func1()
zhangsan.func2()

python 面向對象之繼承,python,python,開發(fā)語言

當我們在子類中調用父類的初始化方法或者方法的時候,函數的參數列表必須加上 self ,否則就會報錯。

當我們在子類中先調用父類的屬性和方法的時候,再調用同名的子類自己的方法的時候,如果沒有先調用子類自己的初始化方法,我們會發(fā)現會使用父類的屬性和方法。

    def func2(self):
        self.__init__()
        self.func()
        
zhangsan = Prentice()
zhangsan.func1()
zhangsan.func2()

python 面向對象之繼承,python,python,開發(fā)語言

我們還可以使用 super() 來調用父類的方法和屬性。但是這種 super() 只能調用子類的直接父類,不能調用簡介的父類,如果想要調用簡介父類,需要在直接父類的方法中使用 super()

super(當前類名,self).函數名

當然super里面的參數也可省略。

class Master():
    def __init__(self):
        self.wugong = '太極'

    def func(self):
        print(f'身懷絕技:{self.wugong}')

class Prentice(Master):
    def __init__(self):
        self.wugong = '閃電五連鞭'

    def func(self):
        print(f'身懷絕技:{self.wugong}')

    def func1(self):
        super().__init__()
        super().func()


zhangsan = Prentice()
zhangsan.func1()  # 身懷絕技:太極

使用 super() 后面的函數參數列表不需要條件self

多層繼承

多層繼承是指一個子類繼承自另一個子類,而該子類又繼承自另一個父類的情況。通過多層繼承,可以在類之間形成層次結構,使得子類可以繼承和重用祖先類的屬性和方法。

# 定義基類A
class A:
    def method_A(self):
        print("This is method A")

# 定義中間類B,繼承自基類A
class B(A):
    def method_B(self):
        print("This is method B")

# 定義子類C,繼承自中間類B
class C(B):
    def method_C(self):
        print("This is method C")

在上述代碼中,類A是基類,類B繼承自基類A,類C繼承自中間類B。這樣,類C就擁有了自己的方法method_C,以及繼承自類B和類A的方法method_B和method_A。

通過多層繼承,實例化類C的對象,我們既可以調用method_C方法,也可以調用從類B和類A繼承而來的方法:

obj = C()
obj.method_C()  # 調用C類的方法
obj.method_B()  # 調用B類的方法
obj.method_A()  # 調用A類的方法
This is method C
This is method B
This is method A

需要注意的是,在進行多層繼承時,我們要謹慎選擇繼承關系,以避免出現復雜和難以維護的繼承鏈。合理設計繼承關系能夠提高代碼的可讀性和可維護性,同時也要注意避免過度依賴繼承,以免造成耦合性過高的問題。

私有權限

父類繼承給子類,可以選擇性的繼承,可以選擇有的東西不繼承,這些不繼承的事物可以被設置成私有權限,私有權限只能在當前類中訪問和修改,就算是該類的子類也不能使用。

在 python 中,如果我們想設置私有權限,可以使用連個下劃線來修飾方法名或者屬性
__xx

class Master():
    def __init__(self):
        self.wugong = '太極'
        self.__name = 'lisi'

    def func(self):
        print(f'身懷絕技:{self.wugong}')

class Prentice(Master):
    def __init__(self):
        self.wugong = '閃電五連鞭'

    def func(self):
        print(super().__name)  3 訪問父類的私有權限



zhangsan = Prentice()
zhangsan.func()

python 面向對象之繼承,python,python,開發(fā)語言
我們不能訪問和修改父類中的私有權限

但是呢,我們的父類可以提供接口來供子類或者其他類來獲取和修改私有權限。

我們通常使用 get_xx 來獲取私有權限值,set_xx 來修改私有權限值。

class Master():
    def __init__(self):
        self.wugong = '太極'
        self.__name = 'lisi'

    def func(self):
        print(f'身懷絕技:{self.wugong}')

    def get_name(self):
        return self.__name

    def set_name(self,name):
        self.__name = name

master = Master()
print(master.get_name())
master.set_name('wangwu')
print(master.get_name())

python 面向對象之繼承,python,python,開發(fā)語言
python 面向對象之繼承,python,python,開發(fā)語言文章來源地址http://www.zghlxwxcb.cn/news/detail-553011.html

到了這里,關于python 面向對象之繼承的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!

本文來自互聯(lián)網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • python 面向對象之繼承

    python 面向對象之繼承

    前面我們已經學習了 python 面向對象的類和對象,那么今天我將為大家分享面向對象的三大特性之一:繼承。 繼承具有以下特性: 代碼重用:繼承允許我們創(chuàng)建一個新的類,并從一個或多個現有的類中繼承屬性和方法。這使得我們可以避免重復編寫相同的代碼,提高代碼的重

    2024年02月15日
    瀏覽(28)
  • Go后端開發(fā) -- 面向對象特征:結構體 && 繼承 && 多態(tài) && interface

    Go后端開發(fā) -- 面向對象特征:結構體 && 繼承 && 多態(tài) && interface

    type 用來聲明數據類型 使用 type 定義結構體 對于結構體對象: 可以先定義后初始化; 也可以直接在{}中初始化 值傳參 傳遞的是結構體的拷貝,原結構體不會發(fā)生改變 引用傳遞 傳遞的是結構體的指針,原結構體的值會改變 GetName 這個函數前面的 (this Hero) 表明這個函數是綁定

    2024年01月17日
    瀏覽(27)
  • Python-面向對象:面向對象、成員方法 、類和對象、構造方法、魔術方法、封裝、繼承、類型注解、多態(tài)(抽象類(接口))

    Python-面向對象:面向對象、成員方法 、類和對象、構造方法、魔術方法、封裝、繼承、類型注解、多態(tài)(抽象類(接口))

    當前版本號[20230806]。 版本 修改說明 20230806 初版 生活中數據的組織 學校開學,要求學生填寫自己的基礎信息,一人發(fā)一張白紙,讓學生自己填, 易出現內容混亂 但當改為登記表,打印出來讓學生自行填寫, 就會整潔明了 程序中數據的組織 在程序中簡單使用變量來記錄學

    2024年02月14日
    瀏覽(22)
  • Python面向對象編程(一)類的基礎,關系,繼承,封裝,多態(tài)

    Python面向對象編程(一)類的基礎,關系,繼承,封裝,多態(tài)

    類的一些理論概念及其應用場景等基礎內容此處不贅述 目錄 python中一切皆對象 類的定義及基礎 屬性 方法 初始化方法 ?普通方法 類之間的關系 相互調用 依賴關系 關聯(lián)關系 組合關系 三大特征----類的繼承 重寫父類方法 多繼承 混合繼承? 三大特征----封裝 三大特征----多態(tài)

    2024年02月10日
    瀏覽(30)
  • 面向對象詳解,面向對象的三大特征:封裝、繼承、多態(tài)

    面向對象詳解,面向對象的三大特征:封裝、繼承、多態(tài)

    一、面向對象與面向過程 面向對象編程 (Object-Oriented Programming,簡稱OOP)和 面向過程編程 (Procedural Programming,簡稱PP)是兩種不同的 編程范式 。 面向對象編程強調把問題分解成對象,通過封裝、繼承和多態(tài)等機制,來處理對象之間的關系 。每個對象都可以獨立地處理自

    2024年02月21日
    瀏覽(23)
  • python 面向對象編程的特點 - 封裝 - 繼承(經典類、新式類) - 多態(tài) - 靜態(tài)方法、類方法 - 下劃線的使用 - 回合制攻擊游戲實驗

    python 面向對象編程的特點 - 封裝 - 繼承(經典類、新式類) - 多態(tài) - 靜態(tài)方法、類方法 - 下劃線的使用 - 回合制攻擊游戲實驗

    目錄 面向對象編程的特點: 封裝:封裝是將數據和操作(方法)封裝在一個對象中的能力 繼承:繼承是指一個類(子類)可以繼承另一個類(父類)的屬性和方法。 我們?yōu)槭裁葱枰^承呢? 父類/基類 = ATM 子類/派生類= ChinaATM/ICBCATM ATM系統(tǒng)父類子類講解代碼: 經典類和新式

    2024年02月15日
    瀏覽(24)
  • C++ 面向對象(2)——繼承

    C++ 面向對象(2)——繼承

    面向對象程序設計中最重要的一個概念是繼承。繼承允許我們依據另一個類來定義一個類,這使得創(chuàng)建和維護一個應用程序變得更容易。這樣做,也達到了重用代碼功能和提高執(zhí)行效率的效果。 當創(chuàng)建一個類時,您不需要重新編寫新的數據成員和成員函數,只需指定新建的類

    2024年02月10日
    瀏覽(23)
  • Java面向對象繼承

    目錄 繼承的概念 繼承的作用 繼承 extends implements super 與 this 繼承類型 類的繼承格式 繼承是面向對象編程中的一個概念,它允許一個類(稱為子類或派生類)繼承另一個類(稱為父類或基類)的屬性和方法。子類在繼承父類的同時也可以添加自己

    2023年04月13日
    瀏覽(20)
  • 【C++面向對象】8. 繼承

    【C++面向對象】8. 繼承

    繼承允許我們依據一個類來定義另一個類,這使得創(chuàng)建和維護一個應用程序變得更容易。這樣做,也達到了 重用代碼功能 和 提高執(zhí)行時間 的效果。 當創(chuàng)建一個類時,我們不需要重新編寫新的數據成員和成員函數,只需指定新建的類繼承了一個已有的類的成員即可。這個已

    2024年02月08日
    瀏覽(20)
  • 02 面向對象( 繼承,抽象類)

    強調:一定用自己的話總結,避免抄文檔,否則視為作業(yè)未完成。 this的作用 為了解決成員變量和局部變量所存在的二義性,適用于有參構造時使用 示例 為成員變量設置值, 構造器和setter方法的選擇,為什么? 構造器:在知道具體的參數的時候可以使用,可以創(chuàng)建對象并做

    2024年02月06日
    瀏覽(29)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包