day23總結

目錄

總結

面向對象總複習:python

面向過程編程思想:
核心是過程,過程指的是作事情的步驟,即先幹什麼再幹什麼。
基於該編程思想編程,就比如一條流水線,一種機械式的思惟方式。linux

面向對象編程思想:
核心是對象,對象指的是特徵與技能的結合體。
基於該編程思想編程,就比如創造世界,一種上帝式的思惟方式。面試

類:
類指的是一系列對象相同的特徵與技能的結合體。編程

如何定義類:
先抽象,抽取對象之間相同的特徵與技能。
再定義類。安全

定義類時會發生哪些事情:
1.會產生一個類的名稱空間
2.會把類內部的全部名字,扔進該名稱空間中
注意: 定義類時,就會執行類內部的代碼,若語法不正確,則會報錯。架構

如何產生對象:
調用類會產生一個對象,調用類的過程稱之爲類的實例化,對象稱之爲類的一個實例。函數

init: 調用類時觸發該方法。測試

調用類時發生的事情:
1.調用類會產生一個對象的名稱空間。
2.會觸發__init__,接着把對象與括號內全部的參數都傳給__init__(),對象看成第一個參數。
3.在__init__內部,能夠給對象添加屬性。大數據

對象的名字查找:
1.先找對象本身的
2.若對象沒有,則去類中查找
3.類中沒有,則會默認繼承object類中查找架構設計

對象的綁定方法特殊之處:
類來調用,類內部的方法只是一個普通函數,函數須要幾個參數就傳幾個。
對象的綁定方法,由對象來調用,會自動把對象看成第一個參數傳給該方法。
注意: 不一樣的對象調用對象的綁定方法,會綁定給不一樣的對象。

一切皆對象:
在python中一切皆對象。

python八大數據類型皆爲對象:
    n = 10  # n = int(10)
    list  tuple set dict float bool str
內置函數: filter

人狗大戰:
人咬狗
狗又咬人
人狗互咬。

繼承:
繼承指的是新建類的方式,新建的類指的子類或派生類,
子類能夠繼承一個父類,父類又能夠稱之爲基類或超類。

如何查找繼承關係:
必須遵循「先抽象,再繼承」

抽象:
抽取類似的部分。

  • 先抽象
    抽取類與類之間相同的特徵與技能。
  • 再繼承
    確認好子類與父類
    定義父類,父類中寫類與類之間相同的特徵與技能。
    子類繼承父類的屬性

class Father:
pass

class Sub(Father):
pass

*******繼承關係:
類是對象與對象之間的關係,類是一系列對象相同的特徵與技能的結合體。
繼承是類與類之間的關係,子類與父類是一種從屬關係。

派生:
派生指的子類繼承父類的屬性,並派生出本身的屬性。

子類能夠派生本身的屬性,並重用父類的屬性
1.直接調用類,類名.屬性的方式重用父類的屬性。
2.super(),super().指向的父類的名稱空間,重用父類的屬性。
注意: 子類派生出與父類相同的屬性,以子類的爲主。

在繼承背景下,對象屬性的查找順序
1.先從對象的名稱空間中查找
2.去類的名稱空間中查找
3.去父類的名稱空間中查找
4.去object裏面查找,若沒有則報錯。

新式類與經典類:
繼承object的類,都稱之爲新式類。
在python2中,沒有繼承object的類,都稱之爲經典類。

鑽石繼承(菱形繼承):

新式類:
    廣度優先

經典類:
    深度優先

組合:
組合指的是一個對象的屬性,是另外一個對象。

組合的做用,與繼承同樣,都是解決代碼冗餘問題。

繼承的優勢:
    編寫的複雜程度沒有組合高。

繼承的缺點:
    耦合度過高,可擴展性差。

組合的優勢:
    可讓類與類之間解耦合, 可擴展性高。

組合的缺點:
    編寫的複雜程度高於繼承。

封裝:
封裝指的是把一堆屬性,封裝到對象中,對象就比如一個袋子,或一個容器。
優勢:
方便數據的存取。
能夠經過「對象.屬性」的方式獲取/取數據與方法。

封裝是面向對象的核心。

訪問限制機制:
在類內部,凡是以__開頭的屬性,都會被隱藏,實際是變形--> _類名__屬性

好處:
    能夠對一些重要的數據進行隱藏,不輕易被直接調用,保證數據的安全。
    好比與金錢、用戶信息相關的操做。

property:
讓看起來像動詞的方法,變成以名詞的方式調用。
方法名 不須要加括號調用。

多態:
同一種事物的多種形態。
水: 液態水、固態水、氣態水

多態的目的:
    爲了統一代碼編寫的規範。

多態的實現方式:
    繼承:
        子類繼承父類的特徵與技能。

    抽象類:
        1.導入一個abc模塊
        2.讓父類繼承一個ABCMeta
        3.給類內部全部的方法加上abc.abstractmethod裝飾器
        子類繼承抽象類,強制讓子類繼承父類的方法,缺一不可。

    鴨子類型:
        只要長得像鴨子,而且叫聲、行爲與鴨子一摸同樣,那麼就是鴨子。
        同一種事物的類,都有相同的功能,該這些類都在內部定義相同名稱的方法。

classmethod:
是一個裝飾器,用來裝飾在類內部的方法,可讓該方法變成類的綁定方法。
對象綁定方法:
由對象來調用,會把對象看成第一個參數傳給該方法。

類的綁定方法:
    由類來調用,會把類看成第一個參數傳給該方法。

staticmethod:
是一個裝飾器,用來裝飾在類內部的方法,可讓該方法變成非綁定方法。

非綁定方法特殊之處:
    由誰來調用都是一個普通函數。

面向對象高級:
- isinstance:
判斷對象是不是類的一個實例。

- issubclass:
    判斷一個類是不是另外一個類的子類。

- 反射: 經過字符串操做對象或類的屬性。

    hasattr: 判斷字符串是不是一個對象或類的屬性。
    getattr: 經過字符串獲取一個對象或類的屬性,若沒有默認是None。
        getattr('對象或類', '字符串屬性名', '自定義的默認值')

    setattr: 經過字符串設置一個對象或類的屬性。
        setattr('對象或類', '字符串屬性名', '屬性的值')

    delattr: 經過字符串刪除一個對象或類的屬性。
        delattr('對象或類', '刪除的字符串屬性名')

- 魔法方法(類的內置方法):
    - __init__: 在調用類時觸發,在__new__沒有返回一個空對象時不會觸發。

    - __new__: 在__init__執行前觸發,必需要返回一個空對象。
        - object.__new__(cls)  # cls --> 當前類

    - __str__: 在打印對象時觸發。

    - __getattr__: 會在 對象.屬性,屬性沒有時觸發。
        在類內部有__getattribute__,就不會執行__getattr__。
    - __getattribute__: 會在 對象.屬性,無論屬性有沒有都會觸發。

    *******面試題:__getattr__與__getattribute__的區別。

    - __setattr__: 會在 對象.屬性=屬性值 時觸發。

    - __del__: 會在對象被銷燬前觸發。

    - __call__: 會調用對象時執行。

    - __delattr__: 會在對象刪除屬性時觸發。

單例模式:
單例指的是,調用一個類時實例化獲得多個對象時,對象指向同一個對象名稱空間。

- @classmethod
- __new__

選課系統:
1.需求分析

2.程序的架構設計

3.分任務開發

4.測試

5.上線運營

需求:

  1. 建立北京、上海 2 所學校 --> 建立學校
  2. 建立linux , python , go 3個課程 , linux\py在北京開,go在上海開 --> 建立課程
  3. 管理員建立學校 ,老師,課程
  4. 學校包含學校名稱,地址等屬性
  5. 學生註冊登陸後,能夠選擇學校,選擇課程,查當作績
  6. 學生只能選擇一所學校,從校區中選擇一門課程,課程綁定給學生。
  7. 老師登陸後,能夠查看教授課程,選擇想要教授的課程,查看課程下的學生,修改學生成績等

用戶能夠操做的界面:
1.管理員
註冊
登陸

建立學校
        - 學校名稱
        - 學校地址

    建立老師
        - 用戶名
        - 密碼

    建立課程
        - 選擇校區
        - 課程名稱 課程綁定給校區

2.學生
    註冊
    登陸
    選擇學校
        - 一個學生只能選擇一個學校

    選擇課程
        - 一個學生能夠選擇多門課程

    查當作績
        - 學生能夠查找本身的成績

3.老師
    登陸
    查看教授課程
    選擇教授課程
    查看課程學生
    修改學生成績
相關文章
相關標籤/搜索