文章目錄
對象(object)
什麼是對象
- 對象是內存中用於存儲數據的一塊區域,對象中可以存儲各種數據
- 對象由三部分構成,id、type、value
- python學習筆記三 之 對象基礎知識
面向對象
- python是一門面向對象的編程語言
- 面向對象就是語言中所有操作都是通過對象進行的;
- 面向過程的編程語言:面向過程就是將程序的邏輯分解爲一個一個的步驟,通過對每個步驟的抽象來完成程序;
- 面向過程編寫的代碼往往只適用於一個功能,要實現別的功能,需要從新編寫,複用性較低,也不方便維護;
- 面向對象的編程語言,關注的是對象不關注過程;需要執行的功能保存在對應的對象中;
類(class)
- 目前學習的都是python內置對象;內置對象並不能完全滿足需求,因此需要自定義對象;
- 我們需要根據類來創建對象;對象是類的示例,如int(),bool()等都是類;
- 如果多個對象是通過一個類創建的,則稱這些對象就是以類對象;
定義簡單類
語法
class 類名([父類]):
代碼塊
注: 中括號[]裏內容可以省略;
創建對象
- 類似調用函數調用類名創建對象;
obj1就是一個通過my_class創建的對象
isinstance()
- isinstance()用於檢查一個對象是否是一個類的實例;
a是int類中的對象,不是my_class類的對象,所以返回false;
obj1是my_class中對象,所以返回true;
對象創建流程(簡單)
- 創建一個變量
- 在內存中創建一個新對象
- 將對象的id賦值給變量
- 可以向對象中添加變量,對象中的變量叫做屬性
- 語法 對象.屬性名=值
- 語法 對象.屬性名=值
定義類
- 類和對象都有兩部分組成
- 數據(屬性),如一個人有身高、體重、姓名等數據;
- 行爲(方法),如一個有跑、走、跳等行爲;
定義語法
class 類名([父類]):
代碼塊
- 在類的代碼塊中,可以定義變量和函數
- 變量會成爲所有對象的公共屬性,所有對象都可以通過對象名.屬性名來訪問這些變量;
- 函數稱爲方法會成爲所有對象的公共方法,所有對象都可以通過 對象名. 方法名()來訪問這些方法;
- 注意 方法調用時會默認傳遞一個實參,所有方法定義時需至少定義一個形參;否則會報錯;
- 變量會成爲所有對象的公共屬性,所有對象都可以通過對象名.屬性名來訪問這些變量;
類和對象查找流程
- 當我們調用對象的屬性時,解析器會先在當前對象中尋找是否含有該屬性,若有,則返回該值,若沒有,則去對象所屬類中去尋找,若有則返回該值,若沒有則報錯;
- 如果屬性或方法是所有的示例共享的,則應該保存到類對象中,
- 如果屬性或方法是某個對象獨有的,則保存到某個類對象中,
方法第一個參數
- 方法每次被調用時,解析器都會自動傳遞第一個實參,該實參就是調用該方法的對象本身,如果是對象1調的,則第一個參數就是對象1;如果是對象2調的,則第一個參數就是對象2;一般將其命名爲self;
用self可以訪問調用對象的屬性;
類的特殊方法init
- 在類中可以定義一些特殊方法(魔術方法),特殊方法以__(兩個下劃線)開頭,__(兩個下劃線)結尾,特殊方法不需要我們自己調用,它會在特殊時刻自動調用
- init會在對象創建時調用
對象創建流程(完整)
- 創建一個變量
- 在內存中創建一個新對象
- 執行類代碼塊中的代碼,只在類定義的時候執行一次;
- 執行_init(self)_方法,每創建一個對象執行一次;
- 將對象的id賦值給變量
屬性和方法
類屬性
- 類中定義的變量稱爲類屬性,類屬性能通過實例對象和類對象來訪問
- 類屬性只能通過類對象修改
實例屬性
- 通過實例對象添加的屬性稱爲實例屬性
- 實例屬性只能通過實例對象來訪問和修改
實例方法
- 在類中定義,第一個參數是self,也就是調用該函數的對象
- 實例方法可以通過實例和類調用
- 通過實例調用時,會自動將調用對象作爲self傳入
- 通過類調用時,需要手動傳入對象作爲self
下面演示的兩種方式等價
類方法
- 用裝飾器@classmethod來修飾的方法就是類方法
- 類方法的第一個參數是cls,會被自動傳遞,cls就是當前的類對象
- 類方法可以通過實例和類調用,兩者沒有區別
靜態方法
- 靜態方法不需要傳遞參數,可以通過類和實例調用;
- 靜態方法只是一個保存到當前類的函數,是一個工具方法,與類關係不大
類的基本結構
class 類名([父類]):
公共屬性
…
def __ init __(self,…)
…
其他方法
…