Python3快速入門知識點:面向對象
面向對象
類與對象是面向對象編程的兩個主要方面。一個類(Class)能夠創建一種新的類型(Type),其中對象(Object)就是類的實例(Instance)。可以這樣來類比:你可以擁有類型 的變數,也就是說存儲整數的變數是 類的實例(對象)。
類(Class):用來描述具有相同的屬性和方法的對象的集合。它定義了該集合中每個對象所共有的屬性和方法。對象是類的實例。
方法:類中定義的函數。
類變數:類變數在整個實例化的對象中是公用的。類變數定義在類中且在函數體之外。類變數通常不作為實例變數使用。
數據成員:類變數或者實例變數用於處理類及其實例對象的相關的數據。
方法重寫:如果從父類繼承的方法不能滿足子類的需求,可以對其進行改寫,這個過程叫方法的覆蓋(override),也稱為方法的重寫。
實例變數:定義在方法中的變數,只作用於當前實例的類。
繼承:即一個派生類(derived class)繼承基類(base class)的欄位和方法。繼承也允許把一個派生類的對象作為一個基類對象對待。例如,有這樣一個設計:一個Dog類型的對象派生自Animal類,這是模擬"是一個(is-a)"關係(例圖,Dog是一個Animal)。
實例化:創建一個類的實例,類的具體對象。
對象:通過類定義的數據結構實例。對象包括兩個數據成員(類變數和實例變數)和方法。
Python 中的類提供了面向對象編程的所有基本功能:類的繼承機制允許多個基類,派生類可以覆蓋基類中的任何方法,方法中可以調用基類中的同名方法。
對象可以包含任意數量和類型的數據。
self
表示的是當前實例,代表當前對象的地址。類由 表示。
不是關鍵字,其他名稱也可以替代,但 是個通用的標準名稱。
類
類由 關鍵字來創建。
類實例化後,可以使用其屬性,實際上,創建一個類之後,可以通過類名訪問其屬性。
對象方法
方法由 關鍵字定義,與函數不同的是,方法必須包含參數 , 且為第一個參數, 代表的是本類的實例。
類方法
裝飾器 可以將方法標識為類方法。類方法的第一個參數必須為 ,而不再是 。
靜態方法
裝飾器 可以將方法標識為靜態方法。靜態方法的第一個參數不再指定,也就不需要 或 。
__init__ 方法
方法即構造方法,會在類的對象被實例化時先運行,可以將初始化的操作放置到該方法中。
如果重寫了 ,實例化子類就不會調用父類已經定義的 。
變數
(Class Variable)是共享的(Shared)——它們可以被屬於該類的所有實例訪問。該類變數只擁有一個副本,當任何一個對象對類變數作出改變時,發生的變動將在其它所有實例中都會得到體現。
(Object variable)由類的每一個獨立的對象或實例所擁有。在這種情況下,每個對象都擁有屬於它自己的欄位的副本,也就是說,它們不會被共享,也不會以任何方式與其它不同實例中的相同名稱的欄位產生關聯。
在 Python 中,變數名類似 的,也就是以雙下劃線開頭,並且以雙下劃線結尾的,是特殊變數,特殊變數是可以直接訪問的,不是 private 變數,所以,不能用 、 這樣的變數名。
訪問控制
私有屬性
:兩個下劃線開頭,聲明該屬性為私有,不能在類地外部被使用或直接訪問。
私有方法
:兩個下劃線開頭,聲明該方法為私有方法,只能在類的內部調用,不能在類地外部調用。
我們還認為約定,一個下劃線開頭的屬性或方法為的。比如,、。
繼承
類可以繼承,並且支持繼承多個父類。在定義類時,類名後的括弧中指定要繼承的父類,多個父類之間用逗號分隔。
子類的實例可以完全訪問所繼承所有父類的非私有屬性和方法。
若是父類中有相同的方法名,而在子類使用時未指定,Python 從左至右搜索,即方法在子類中未找到時,從左到右查找父類中是否包含方法。
方法重寫
子類的方法可以重寫父類的方法。重寫的方法參數不強制要求保持一致,不過合理的設計都應該保持一致。
函數可以調用父類的一個方法,以多繼承問題。
類的專有方法:
: 構造函數,在生成對象時調用
: 析構函數,釋放對象時使用
: 列印,轉換
: 按照索引賦值
: 按照索引獲取值
: 獲得長度
: 比較運算
: 函數調用
: 加運算
: 減運算
: 乘運算
: 除運算
: 求余運算
: 乘方
類的專有方法也支持重載。
實例
(左右滑動可查看完整代碼)
輸出:
面向對象完結


TAG:python |