Python中關於面向對象的相關知識

面向對象特色

  • 注重對象與職責,不一樣對象,不一樣職責;
  • 應對複雜項目開發,提供固定模版;
  • 基於面向過程;
  • 封裝:根據功能將屬性和方法封裝到一個抽象的類中;
  • 繼承:實現代碼複用,相同代碼不需屢次編寫;
  • 多態:不一樣對象調用相同方法得出不一樣結果,增長了代碼的靈活度;

對象

類建立出來的一個具體存在,可直接使用,擁有類所具備的屬性與方法;python

類與對象的關係

  • 類是模版,對象根據類建立而出,先有類再有對象;
  • 類只有一個,但對象能夠有多個;
  • 類中定義屬性與方法,對象中只能具備所建立而出的類所具備的屬性與方法;

類的設計三要素

  • 類名:通常知足大駝峯命名法;
  • 屬性:一類事物所具備的特徵;
  • 方法:一類事物所具備的行爲;

添加類的屬性

  • 在建立類以後,對象能夠在外部直接使用.屬性名 給對象增長屬性,可是這種方式不推薦使用,由於它並無將屬性封裝到類的內部中,只是對象臨時的屬性;
  • 在初始化方法內部定義屬性以後,在使用該類建立新對象時,所建立的新對象都會擁有該屬性,使用方法:self.屬性名 = 屬性初始值

對象及內置方法生命週期

方法 功能
__init_ 初始化對象並設置屬性
__del_ 銷燬對象
__str_ 必須返回一個字符串,定製變量的輸出信息
  • 對象從調用類名()建立時生命週期即開始;
  • 對象生命週期內,既能夠訪問對象屬性,也能夠調用對象方法;
  • 對象的__del__方法一旦調用,對象的生命週期即結束;

身份運算符

  • 功能:用於比較兩個對象內存地址是否一致--即判斷是不是對同一對象的引用;
  • is==的區別
    • is用於判斷兩個變量引用對象是否爲同一個;
    • ==用於判斷引用變量的值是否相等;

私有屬性與方法

  • 定義方式:屬性名或方法名以前增長兩個下劃線,則定義的屬性或方法就是私有屬性或方法;
  • 特色:在對象方法外部是不能直接訪問的,只有在方法內部纔可以訪問;
  • 子類對象不能直接訪問父類私有屬性或私有方法,但能夠經過父類的公有方法間接訪問私有屬性或私有方法;

僞私有屬性與方法

  • 對於定義的私有屬性與方法,經過_類名__名稱的方式便可訪問,因此說私有屬性或方法並不是真正意義的私有,而是內部經過特殊處理假裝起來使得外界沒法訪問的。雖然私有屬性或方法咱們均可以訪問,但平常開發中最好不要使用這種方式來訪問私有屬性或方法;

注意

  • 內置函數__str__必須返回一個字符串;
  • 對象的方法內部,能夠直接訪問對象屬性;
  • 對於多個對象之間,各自的屬性是互不干擾的;

繼承

  • 語法
class A(B):
	pass
  • 子類繼承於父類,擁有父類所封裝的屬性與方法,無需二次開發;
  • 子類只須要封裝屬於本身特有的,有別於父類的屬性與方法便可;
  • 特性:傳遞性;
  • 方法重寫:
    • 覆蓋基類方法;
    • 對基類方法進行拓展,須要使用super().父類方法來調用父類方法的執行,而後在方法中其餘位置進行對子類方法的擴展;

多繼承

  • 語法
class 子類名(父類名1, 父類名2,...):
	pass
  • 注意事項
    • 父類名應該避免重複;
    • 不一樣父類中的屬性或方法應該避免同名;

新式類與經典類

  • 新式類
class A(object):
    pass
  • 經典類
class A:
    pass

實例化

  • 每一個對象實例化是都有本身獨立的內存空間,用於保存各自不一樣的屬性;
  • 而多個對象的方法在內存中只有一份,在調用方法時須要吧對象的引用傳遞到方法內部;

類方法

  • 語法
@classmethod
def 類方法名(cls):
    pass
  • 在類方法內部
    • 經過cls.訪問類的屬性;
    • 經過cls.調用其餘類方法;

靜態方法

  • 須要封裝爲靜態方法的狀況:
    • 無需訪問實例屬性或實例方法;
    • 無需訪問類屬性或類方法;
  • 語法
@staticmethod
def 靜態方法名():
    pass

實例方法、類方法、靜態方法之間的區別

  • 實例方法:方法內部須要訪問實例屬性,實例方法內部需使用類名.訪問類屬性;
  • 類方法:方法內部只須要訪問類屬性
  • 靜態方法:方法內部不需訪問實例屬性類屬性
相關文章
相關標籤/搜索