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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

87_类成员的继承和重写

發布時間:2023/12/20 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 87_类成员的继承和重写 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

  • 91.類成員的繼承和重寫
    • 查看類的繼承層次結構
    • 重寫的兩個例子


91.類成員的繼承和重寫

  • 成員繼承:子類繼承了父類除構造方法之外的所有成員。
  • 方法重寫:子類可以重新定義父類中的方法,這樣就會覆蓋父類的方法,也稱為“重寫”
  • 【操作】繼承和重寫的案例

    class Person:def __init__(self, name, age):self.name = nameself.__age = age # 私有屬性def say_age(self):print("我的年齡:", self.__age) # 私有屬性 給一個接口 訪問 agedef say_introduce(self): # 自我介紹的意思print("我的名字是{0}".format(self.name))class Student(Person):def __init__(self, name, age, score):Person.__init__(self, name, age) # 必須顯式的調用父類初始化方法,不然解釋器不會去調用self.score = scoredef say_introduce(self):print("報告老師,我的名字是:{0}".format(self.name))s = Student("haizeiwang", 18, 80) s.say_age() s.say_introduce()

    運行結果:

    我的年齡: 18 報告老師,我的名字是:haizeiwang

    查看類的繼承層次結構

    通過類的方法 mro()或者類的屬性__mro__可以輸出這個類的繼承層次結構。

    【操作】 查看類的繼承層次結構

    class A:pass class B(A):pass class C(B):passprint(C.mro())

    執行結果:

    # 從子孫后代開始排序。一直到 一切對象的 父類 object [<class '__main__.C'>, <class '__main__.B'>, <class '__main__.A'>, <class 'object'>]

    繼承結構圖

    重寫的兩個例子

    tips: 一定不要 和 python 內置的 命名 重復。

    更加不要重復了 還 遞歸 調用。

    其實這只是 一個例子罷了。 換湯不換藥而已。

    class Oar:def __init__(self,oar):self.o=oardef print_(self):print(self.o) # print 不會到class Oar下面找,除非引用self.printdef decorator(cls):def print_(self): print('content: {}'.format(self.o))return selfcls.print_=print_return cls# InheritOar=decorator(InheritOar) 裝飾器 @ 符號等同于這一句 @decorator class InheritOar(Oar):passi=InheritOar("uinp") i.print_


    class Person:def __init__(self,name,id_):self.name=nameself.id_=id_def print_(self):print("name : %s | id : %s"%(self.name,self.id_))class Student(Person):passdef print_(s):print("this is onepis print %s and %s"%(s.name,s.id_))def print_(self):print("this is onepis print %s and %s "%(self.name,self.id_))Student.print_=print_s2=Student("Yamateh",2)s2.print_()


    為什么最好 不要和python 關鍵字 重復命名。

    看下面的示例

    class Oar:def __init__(self,oar):self.o=oardef print(self):# 這里# 如果寫 print(self.o) 會導致遞歸調用根本無法打印。# 并且你的 self 在 遞歸的時候 就被 self.o 給替換掉了。 # print 不會到全局下面找,而是 引用self.print# 所以你的打印就成了死循環return self.o def decorator(cls):def print(self): return 'content: {}'.format(self.o)cls.print=printreturn cls# InheritOar=decorator(InheritOar) 裝飾器 @ 符號等同于這一句 @decorator class InheritOar(Oar):passi=InheritOar("uinp") i.print

    總結

    以上是生活随笔為你收集整理的87_类成员的继承和重写的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。