1. 程式人生 > >2018年4月19日筆記

2018年4月19日筆記

基類 型號 查找 參數 字母 pass DC super clas

  • 類的概念與聲明

類(class):用來描述具有相同屬性和方法的對象的集合。

一個類定義了該集合中每個對象所共有的屬性和方法。

對象是類的實例(instance)。

聲明一個類的一般形式如下:

  class ClassName(object):

    def funName(self):

      pass

一個類時,需註意以下幾點:

  1. 類名首字母大寫,類中函數(即方法)名首字母小寫
  2. object是所有類的父類(superclass),默認所有類都繼承object
  3. object不是必填項,但建議要寫上object,可避免一些不必要的報錯
  4. 類中函數默認第一個參數為self(必填項)
  5. self代表類的實例,而非類
  6. 類中變量(即屬性)都要以self.xxx的形式來聲明和使用
  7. 類中函數(即方法)也要以self.xxx的形式來調用
  8. 類的方法與普通的函數只有一個特別的區別——它們必須有一個額外的第一個參數名稱, 按照慣例它的名稱是 self
  9. self 不是 python 關鍵字,我們把self換成xxx也是可以正常執行的

  • 類的構造器

定義:類在實例化時,首先必須要執行的函數。

__init__()方法是一種特殊的方法,被稱為類的構造函數或初始化方法,當創建了這個類的實例時就會調用該方法

  • 例1:用一個類來描述車,該類有3個屬性分別為制造商、型號、生產年份,用2個方法分別來設置和獲取車輛屬性

技術分享圖片

  • 類的繼承

派生類DerivedClass:即子類

基類BaseClass:即父類

子類聲明的一般形式如下:

class DerivedClassName(BaseClassName):

  pass

當子類和父類不在同一個模塊中時,子類的聲明如下:

class DerivedClassName(modname.BaseClassName):

  pass

多繼承時,子類的聲明如下:

class DerivedClass(BaseClass1, BaseClass2, BaseClass3, ...)

  pass

使用繼承時,強調以下幾點:

  1. 子類存在與父類同名的方法時,則調用子類的方法
  2. 多繼承時,多個父類有同名方法且在子類中未聲明該方法時,python從左至右搜索 即方法在子類中未找到時,從左到右查找父類中是否包含方法,所以要特別註意圓括號中父類的順序
  3. 使用super可以在子類中重寫父類的方法,也可實現子類對象調用父類已被覆蓋的方法

  • 類的私有屬性與私有方法

__privateAttr:兩個下劃線開頭,聲明該屬性為私有,不能在類地外部被使用或直接訪問。在類內部的方法中使用時 self.__privateAttr

__privateMethod:兩個下劃線開頭,聲明該方法為私有方法,只能在類的內部調用 ,不能在類地外部調用。self.__privateMethod

  • 例2:電動車是車的子類,電動車有1個特有屬性為電池容量(私有屬性)

技術分享圖片

  • 拓展知識:如何在類外訪問類的私有屬性?

  Python為了保證不能再class之外訪問該變量,Python會在類的內部自動的把你定義的__spam變量的名字替換成為 _classname__spam(註意,classname前面是一個下劃線,spam前是兩個下劃線),Python把這種技術叫做“name mangling”。因此,用戶在外部訪問__spam的時候就會提示找不到相應的變量。

  但是,這並不是意味著我們真的就不能夠從外部訪問這個變量了,上面說Python在類的內部用_classname__spam替換了__spam,

因此,我們可以在類的外面使用_classname__spam來訪問__spam。

  • 例3:在例2的基礎上,在類外直接訪問類的私有屬性——電池容量

技術分享圖片

2018年4月19日筆記