Python 入門指南- 單元9 - 類別 - 程式語言教學誌

文章推薦指數: 80 %
投票人數:10人

類別(class) 用來設計自己需要的物件(object) ,也就是說類別是物件的藍圖。

Python 中設計類別使用關鍵字(keyword) class ,裡頭可定義類別的類別屬性(class ... Python入門指南 單元9-類別 ~~學習進度表~~ 類別(class)用來設計自己需要的物件(object),也就是說類別是物件的藍圖。

Python中設計類別使用關鍵字(keyword)class,裡頭可定義類別的類別屬性(classattribute)、實體屬性(instanceattribute)與方法(method)等等 classclass_name:  class_object_name  defmethod_name(self):    self.instance 先舉一例示範如何定義類別 class Demo:   def set_att(self, a, b):     self.a = a     self.b = b   def do_something(self):     return self.a + self.b    d = Demo() d.set_att(11, 22) print(d.do_something()) #《程式語言教學誌》的範例程式 #http://kaiching.org/ # 檔名:class_demo.py #功能:示範Python中的類別 #作者:張凱慶*/ class後面空一格,然後接類別的識別字,此例為Demo,最後接一個冒號 class Demo: 下面用縮排的方式定義兩個方法,方法定義使用函數(function)定義相同的關鍵字def class Demo:   def set_att(self, a, b):     self.a = a     self.b = b   def do_something(self):     return self.a + self.b 方法其實跟函數很多地方是一樣的,簡單說,方法可以看作是物件專屬的函數,這裡兩個方法set_att()與do_something()都有一個參數(parameter)名為self def set_att(self, a, b): 我們用橄欖色標記self,主要因為這是個識別字(identifier),代表物件本身自己,當然可以自己取第一個參數的名稱,不過習慣上都用self。

標準程式庫(standardlibrary)中的識別字同樣用橄欖色標記。

set_att()有兩個參數a與b,這兩個參數用來設定實體屬性self.a與self.b self.a = a self.b = b 物件又稱為實體(instance),因為這是從類別所創造出來的。

由於self在方法定義中表示物件本身,因此凡是方法中用self.接識別字都是實體屬性,這是物件的屬性值。

下面建立Demo物件,然後呼叫set_att()與do_something() d = Demo() d.set_att(11, 22) print(d.do_something()) 建立物件類似呼叫函數,指派運算子後面為類別名稱加上小括號,此例執行結果如下 $pythonclass_demo.py 33 $ 參數也可以有預設值,這就在參數列(parameterlist)直接指派數值即可,另舉一例如下 class Demo:   def set_att(self, a=22, b=33):     self.a = a     self.b = b        def do_something(self):     return self.a + self.b d = Demo() d.set_att() print(d.do_something()) #《程式語言教學誌》的範例程式 #http://kaiching.org/ # 檔名:class_demo2.py #功能:示範Python中的類別 #作者:張凱慶*/ 這裡將set_att()的兩個參數都設定初值,因此呼叫時沒有給參數,執行結果如下 $pythonclass_demo2.py 55 $ 下例示範在類別中設置類別屬性及類別方法(classmethod) class Demo:   a = 11   b = 22      @classmethod   def do_something(cls):     cls.a += 1     cls.b += 1     return cls.a + cls.b      print(Demo.do_something()) #《程式語言教學誌》的範例程式 #http://kaiching.org/ # 檔名:class_demo3.py #功能:示範Python中的類別 #作者:張凱慶*/ 類別屬性是放在class關鍵字底下,通常會直接設定初值 class Demo:   a = 11   b = 22 類別方法則要用裝飾子(decorator)@classmethod標示,我們用橘色的語法高亮度標記這個裝飾器 @classmethod def do_something(cls):   cls.a += 1   cls.b += 1   return cls.a + cls.b 同樣的,類別方法的第一個參數習慣上採cls,藉由cls可存取類別屬性,此例的do_something()除了將類別屬性遞增外,也回傳兩個類別的相加值。

呼叫類別方法則是直接以類別名稱呼叫 print(Demo.do_something()) 執行結果如下 $pythonclass_demo3.py 35 $ Python的屬性都預設為公開,就是可以在類別以外的地方存取,接下來我們介紹如何限制屬性只能在類別中存取,也就是把屬性封裝(encapsulate)在類別中。

中英文術語對照 類別屬性classattribute 類別方法classmethod 裝飾器decorator 封裝encapsulate 函數function 識別字identifier 實體instance 實體屬性instanceattribute 關鍵字keyword 方法method 物件object 參數parameter 參數列parameterlist 標準模組庫standardlibrary 重點整理 1.類別是物件設計的藍圖,每一個類別都可定義屬性及方法。

2.方法如同函數,專屬於類別。

實體屬性屬於由類別建立的物件,類別屬性則屬於類別,須由類別名稱調用。

3.self為預設的的參數名稱,表示物件實體。

4.__init__()是類別定義中特殊的方法,用來建立物件。

問題與討論 1.方法跟函數有什麼異同? 2.為什麼要有類別屬性?類別屬性跟實體屬性有什麼不同? 3.如果不寫self,那可以用其他的字代替嗎? 練習 1.寫一個程式exercise0901.py,裡頭設計一個類別IntegerDemo,利用set_value()方法設定實體屬性value,另外定義add()方法,add()需要一個參數p,其內容為value加上p,執行部分先將value設定為25,然後再呼叫add()並以24當參數。

2.承上題,另寫一個程式exercise0902.py,改成由使用者輸入兩個整數。

3.承上題,另寫一個程式exercise0903.py,加入subtract()方法,subtract()是將value減去參數值,最後結果儲存在value。

4.承上題,另寫一個程式exercise0904.py,繼續擴充IntegerDemo,加入乘法的方法。

5.承上題,另寫一個程式exercise0905.py,繼續擴充IntegerDemo,加入除法的方法。

6.寫一個程式exercise0906.py,仿照IntegerDemo,將方法改成計算階層值,結果儲存在value。

7.寫一個程式exercise0907.py,仿照IntegerDemo,將方法改成計算費氏數列,結果儲存在value。

相關教學影片 第五堂課導覽⇨YouTube頁面連結 Python的內建型態與自訂類別⇨YouTube頁面連結 上一頁單元8-函數 回Python入門指南首頁 下一頁單元10-物件導向與封裝 回Python教材首頁 回程式語言教材首頁



請為這篇文章評分?