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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

Day 23 面向对象进阶

發布時間:2025/5/22 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Day 23 面向对象进阶 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

目錄

  • 面向對象進階
    • 類的繼承
      • 什么是繼承
      • 為什么要用繼承
      • 對象的繼承
      • 對象查找屬性的順序
    • 類的派生
    • 類的組合
    • 菱形繼承問題
      • 類的分類
      • 菱形繼承問題
    • 多態與多態性
      • 多態
      • 多態性

面向對象進階

類的繼承

什么是繼承

  • 繼承是一種新建類的方式,新建的類稱為子類,被繼承的類稱為父類
  • python當中,父類,子類(派生類),父類和子類只有在繼承的時候才會產生
  • 繼承是為了獲取父類的屬性

為什么要用繼承

  • 集成可以減少代碼冗余

對象的繼承

  • python中支持一個子類繼承多個父類,但是不推薦使用繼承多個父類,當你繼承多個的時候,功能與功能之間就會混亂,所以建議繼承一個
  • python3中如果一個類沒有繼承任何類,那么默認繼承object類
  • python2中如果一個類沒有繼承任何類,不會繼承object類

對象查找屬性的順序

先對象自己,后然后對象的類,然后父類,在父類,知道object類

類的派生

派生就是子類定義新的屬性,同時還繼承父類的所有屬性

方法一:指名道姓的訪問某一個類的函數,該方式與繼承無關

class Animal():def __init__(self, height, weight): self.height = height self.weight = weight def jiao(self):print(self.__class__.__name__, '叫')class People(Animal):def __init__(self, name, age,height,weight):Animal.__init__(self,height,weight)self.name = nameself.age = agedef read(self):print('read')p1=People('nick',18,180.140) print(p1.__dict__)

方法二:派生

  • 嚴格以繼承屬性查找關系
  • super()會得到一個特殊的對象,該對象就是專門用來訪問父類中的屬性的(按照繼承的關系)
  • super的完整用法是super(自己的類名,self),在python2中需要完整寫明,二python3中可以簡寫為super()
class OldBoyPeople:school='oldboy'def __init__(self,name,age,sex):self.name=nameself.age=ageself.sex=sexclass OldBoyStudent(OldBoyPeople):def __init__(self,name,age,sex,stu_id):super().__init__(name,age,sex)self.stu_id=stu_iddef choose_course(self):print(f'{self.name} is choosing course')stu1=OldBoyStudent('nick',19,'male','001')

類的組合

組合就是一個類的對象具備某一個屬性,該屬性的值是指向另外一個類的對象

組合就是用來解決類與類之間代碼冗余的問題

class People:def __init__(self,name,sex):self.name=nameself.sex=sexdef eat(self):print(f'{self.name}開始吃')class Student(People):def __init__(self,id,name,sex):super(Student, self).__init__(name,sex)self.id=iddef choose_course(self,course):self.course=course #相當于student派生一個course屬性,該屬性引用外部傳入的course也就是Course生成的對象print(f'{self.name}選擇了課程{course.name}')class Teacher(People):def __init__(self,level,name,sex):super(Teacher, self).__init__(name,sex)self.level=leveldef scored(self,student,course,score):print(f'{self.name}給學生{student.name}的課程{course.name}打{score}分')class Admin(People):def create_course(self,name,price):course=Course(name,price)print(f'管理員{self.name}創建了課程{name}')return courseclass Course:def __init__(self,name,price):self.name=nameself.price=pricest1=Student('01','zhujian','male') st2=Student('02','tom','male') print(st1.__dict__) print(st2.__dict__)t1=Teacher('1','nick','male') print(t1.__dict__)a1=Admin('egon','male') print(a1.__dict__)linux=a1.create_course('linux',6666) python=a1.create_course('python',8888)st1.choose_course(python) st2.choose_course(linux)t1.scored(st1,python,'96') t1.scored(st2,linux,'95')

菱形繼承問題

類的分類

  • 新式類
    • 繼承了object的類以及該類的子類,都是新式類
    • python3中所有的類都是新式類
  • 經典類
    • 沒有繼承object的類以及該類的子類,都是經典類
    • 只有python2中才有經典類

    菱形繼承問題

    如果繼承關系為菱形結構,即子類的父類最后繼承了同一個類,那么屬性的查找有兩種:

    • 經典類:深度優先:一條路走到底.先從子類的第一個父類開始查找,直到這個子類繼承的最后一個父類,如果沒有找到就從子類的第二個父類開始查找(但不會找到最后一個父類),然后是子類的第三個父類,第四個父類,直到找到需要的屬性
    • 新式類:廣度優先:不直接找最后一個繼承的父類,先從子類的子一個父類開始找,跳過繼承的最后一個父類,然后子類的第二個父類,第三個,直到最后一個父類然后再去查找他們繼承的最后一個父類

    普通繼承就是按照正常循序查找

    多態與多態性

    多態

    多態指的是一類事物有多種形態(一個抽象類有多個子類,因而多態的概念依賴于繼承)

    多態性

    多態性是指具有不同功能的函數可以使用相同的函數名,這樣就可以用給一個函數名調用不同內容的函數

    轉載于:https://www.cnblogs.com/masterjian924/p/11056499.html

    總結

    以上是生活随笔為你收集整理的Day 23 面向对象进阶的全部內容,希望文章能夠幫你解決所遇到的問題。

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