1. 程式人生 > >(一)Python入門-6面向對象編程:02類的定義-類和對象的關系-構造函數-實例屬性-實例方法

(一)Python入門-6面向對象編程:02類的定義-類和對象的關系-構造函數-實例屬性-實例方法

語句塊 訪問 也不能 form 行為 sizeof 對象創建 div span

一:類的定義

  如果把對象比作一個“餅幹”,類就是制造這個餅幹的“模具”。

  我們通過類定義數據類型的屬性(數據)和方法(行為),也就是說,“類將行為和狀態打 包在一起”。

     技術分享圖片

  對象是類的具體實體,一般稱為“類的實例”。類看做“餅幹模具”,對象就是根據這個“模 具”制造出的“餅幹”。

  從一個類創建對象時,每個對象會共享這個類的行為(類中定義的方法),但會有自己的屬 性值(不共享狀態)。更具體一點:“方法代碼是共享的,屬性數據不共享”。

    技術分享圖片

  Python中,“一切皆對象”。類也稱為“類對象”,類的實例也稱為“實例對象”。

  定義類的語法格式如下:

    class 類名:

      類體

  要點如下:

    1. 類名必須符合“標識符”的規則;一般規定,首字母大寫,多個單詞使用“駝峰原則”。

    2. 類體中我們可以定義屬性和方法。

    3. 屬性用來描述數據,方法(即函數)用來描述這些數據相關的操作。

【操作】一個典型的類的定義

#類的定義
class
Student: #類名一般首字母大寫,多個單詞采用駝峰規則 def __init__(self,name,score): #self必須要有,必須位於第一個參數 self.name = name self.score = score def say_score(self): #self必須要有,必須位於第一個參數 print(姓名是:{0},分數是:{1}.format(self.name,self.score)) s1 = Student(jack,100) #通過類名()調用構造函數 s1.say_score() #其他操作 print(dir(s1)) #獲得對象的所有屬性、方法 print(s1.__dict__) #對象的屬性字典
class Man: pass #空語句 print(isinstance(s1,Student)) #判斷“對象”是不是“指定類型” print(isinstance(s1,Man))

運行結果:

  姓名是:jack,分數是:100
  [‘__class__‘, ‘__delattr__‘, ‘__dict__‘, ‘__dir__‘, ‘__doc__‘, ‘__eq__‘, ‘__format__‘, ‘__ge__‘, ‘__getattribute__‘, ‘__gt__‘, ‘__hash__‘, ‘__init__‘, ‘__init_subclass__‘, ‘__le__‘, ‘__lt__‘, ‘__module__‘, ‘__ne__‘, ‘__new__‘, ‘__reduce__‘, ‘__reduce_ex__‘, ‘__repr__‘, ‘__setattr__‘, ‘__sizeof__‘, ‘__str__‘, ‘__subclasshook__‘, ‘__weakref__‘, ‘name‘, ‘say_score‘, ‘score‘]
  {‘name‘: ‘jack‘, ‘score‘: ‘100‘}
  True
  False

二:__init__構造方法和__new__方法

  類是抽象的,也稱之為“對象的模板”。我們需要通過類這個模板,創建類的實例對象,然 後才能使用類定義的功能。

  過一個 Python 對象包含三個部分:id(identity 識別碼)、type(對象類型)、 value(對象的值)。
  現在,我們可以更進一步的說,一個 Python 對象包含如下部分:

    1. id(identity 識別碼)

    2. type(對象類型)

    3. value(對象的值)

      (1) 屬性(attribute)

       (2) 方法(method)

  創建對象,我們需要定義構造函數__init__()方法。構造方法用於執行“實例對象的初始化工 作”,即對象創建後,初始化當前對象的相關屬性,無返回值。

  __init__()的要點如下:

    1. 名稱固定,必須為:__init__()

    2. 第一個參數固定,必須為:self。 self指的就是剛剛創建好的實例對象。

    3. 構造函數通常用來初始化實例對象的實例屬性,如下代碼就是初始化實例屬性:name 和score。

        def __init__(self,name,score):

          self.name = name #實例屬性

          self.score = score

    4. 通過“類名(參數列表)”來調用構造函數。調用後,將創建好的對象返回給相應的變量。 比如:s1 = Student(‘張三‘, 80)

    5. __init__()方法:初始化創建好的對象,初始化指的是:“給實例屬性賦值”

    6. __new__()方法: 用於創建對象,但我們一般無需重定義該方法。

    7. 如果我們不定義__init__方法,系統會提供一個默認的__init__方法。如果我們定義了帶參 的__init__方法,系統不創建默認的__init__方法。

    註:Python中的self 相當於C++中的 self 指針, JAVA和C#中的this 關鍵字。Python 中self必須為構造函數的第一個參數,名字可以任意修改。但一般遵守慣例,都叫做 self。

三:實例屬性和實例方法

  (一)實例屬性:

    實例屬性是從屬於實例對象的屬性,也稱為“實例變量”。他的使用有如下幾個要點:

      1. 實例屬性一般在__init__()方法中通過如下代碼定義:

          self.實例屬性名 = 初始值

      2. 在本類的其他實例方法中,也是通過self 進行訪問:

          self.實例屬性名

      3. 創建實例對象後,通過實例對象訪問:

          obj01 = 類名() #創建對象,調用__init__()初始化屬性

          obj01.實例屬性名 = 值 #可以給已有屬性賦值,也可以新加屬性

  (二)實例方法:

    實例方法是從屬於實例對象的方法。實例方法的定義格式如下:

      def 方法名(self [, 形參列表]):

        函數體

    方法的調用格式如下:

      對象.方法名([實參列表])

    要點:

      1. 定義實例方法時,第一個參數必須為self。和前面一樣,self 指當前的實例對象。

      2. 調用實例方法時,不需要也不能給self 傳參。self 由解釋器自動傳參。

    函數和方法的區別:

      1. 都是用來完成一個功能的語句塊,本質一樣。

      2. 方法調用時,通過對象來調用。方法從屬於特定實例對象,普通函數沒有這個特點。

      3. 直觀上看,方法定義時需要傳遞self,函數不需要。

    實例對象的方法調用本質:

      技術分享圖片

     其他操作:

      1. dir(obj)可以獲得對象的所有屬性、方法

      2. obj.__dict__ 對象的屬性字典

      3. pass 空語句

      4. isinstance(對象,類型) 判斷“對象”是不是“指定類型”

(一)Python入門-6面向對象編程:02類的定義-類和對象的關系-構造函數-實例屬性-實例方法