python 學習筆記十二 類與對象

對象(object)

什麼是對象

面向對象

  • python是一門面向對象的編程語言
  • 面向對象就是語言中所有操作都是通過對象進行的;
  • 面向過程的編程語言:面向過程就是將程序的邏輯分解爲一個一個的步驟,通過對每個步驟的抽象來完成程序;
  • 面向過程編寫的代碼往往只適用於一個功能,要實現別的功能,需要從新編寫,複用性較低,也不方便維護;
  • 面向對象的編程語言,關注的是對象不關注過程;需要執行的功能保存在對應的對象中;

類(class)

  • 目前學習的都是python內置對象;內置對象並不能完全滿足需求,因此需要自定義對象;
  • 我們需要根據類來創建對象;對象是類的示例,如int(),bool()等都是類;
    在這裏插入圖片描述
  • 如果多個對象是通過一個類創建的,則稱這些對象就是以類對象;

定義簡單類

語法

class 類名([父類]):
  代碼塊
在這裏插入圖片描述
注: 中括號[]裏內容可以省略;

創建對象

  • 類似調用函數調用類名創建對象;
    obj1就是一個通過my_class創建的對象
    在這裏插入圖片描述

isinstance()

  • isinstance()用於檢查一個對象是否是一個類的實例;

    a是int類中的對象,不是my_class類的對象,所以返回false;
    obj1是my_class中對象,所以返回true;

對象創建流程(簡單)

  1. 創建一個變量
  2. 在內存中創建一個新對象
  3. 將對象的id賦值給變量
  • 可以向對象中添加變量,對象中的變量叫做屬性
    • 語法 對象.屬性名=值
      在這裏插入圖片描述

定義類

  • 類和對象都有兩部分組成
    • 數據(屬性),如一個人有身高、體重、姓名等數據;
    • 行爲(方法),如一個有跑、走、跳等行爲;

定義語法

class 類名([父類]):
  代碼塊

  • 在類的代碼塊中,可以定義變量和函數
    • 變量會成爲所有對象的公共屬性,所有對象都可以通過對象名.屬性名來訪問這些變量;
      在這裏插入圖片描述
    • 函數稱爲方法會成爲所有對象的公共方法,所有對象都可以通過 對象名. 方法名()來訪問這些方法;
    • 注意 方法調用時會默認傳遞一個實參,所有方法定義時需至少定義一個形參;否則會報錯;
      在這裏插入圖片描述
類和對象查找流程
  • 當我們調用對象的屬性時,解析器會先在當前對象中尋找是否含有該屬性,若有,則返回該值,若沒有,則去對象所屬類中去尋找,若有則返回該值,若沒有則報錯;
  • 如果屬性或方法是所有的示例共享的,則應該保存到類對象中,
  • 如果屬性或方法是某個對象獨有的,則保存到某個類對象中,
方法第一個參數
  • 方法每次被調用時,解析器都會自動傳遞第一個實參,該實參就是調用該方法的對象本身,如果是對象1調的,則第一個參數就是對象1;如果是對象2調的,則第一個參數就是對象2;一般將其命名爲self;

用self可以訪問調用對象的屬性;
在這裏插入圖片描述

類的特殊方法init

  • 在類中可以定義一些特殊方法(魔術方法),特殊方法以__(兩個下劃線)開頭,__(兩個下劃線)結尾,特殊方法不需要我們自己調用,它會在特殊時刻自動調用
  • init會在對象創建時調用
    在這裏插入圖片描述

對象創建流程(完整)

  1. 創建一個變量
  2. 在內存中創建一個新對象
  3. 執行類代碼塊中的代碼,只在類定義的時候執行一次;
  4. 執行_init(self)_方法,每創建一個對象執行一次;
  5. 將對象的id賦值給變量

屬性和方法

類屬性
  • 類中定義的變量稱爲類屬性,類屬性能通過實例對象和類對象來訪問
    在這裏插入圖片描述
  • 類屬性只能通過類對象修改
    在這裏插入圖片描述
實例屬性
  • 通過實例對象添加的屬性稱爲實例屬性
  • 實例屬性只能通過實例對象來訪問和修改
    在這裏插入圖片描述
實例方法
  • 在類中定義,第一個參數是self,也就是調用該函數的對象
  • 實例方法可以通過實例和類調用
    • 通過實例調用時,會自動將調用對象作爲self傳入
    • 通過類調用時,需要手動傳入對象作爲self

下面演示的兩種方式等價
在這裏插入圖片描述

類方法
  • 用裝飾器@classmethod來修飾的方法就是類方法
  • 類方法的第一個參數是cls,會被自動傳遞,cls就是當前的類對象
  • 類方法可以通過實例和類調用,兩者沒有區別
    在這裏插入圖片描述
靜態方法
  • 靜態方法不需要傳遞參數,可以通過類和實例調用;
  • 靜態方法只是一個保存到當前類的函數,是一個工具方法,與類關係不大

類的基本結構

class 類名([父類]):
  公共屬性
  …
  def __ init __(self,…)
  …
  其他方法
  …

發佈了55 篇原創文章 · 獲贊 27 · 訪問量 7283
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章