Python 入門指南- 單元9 - 類別 - 程式語言教學誌
文章推薦指數: 80 %
類別(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教材首頁
回程式語言教材首頁
延伸文章資訊
- 1Python 入門指南- 單元9 - 類別 - 程式語言教學誌
類別(class) 用來設計自己需要的物件(object) ,也就是說類別是物件的藍圖。 Python 中設計類別使用關鍵字(keyword) class ,裡頭可定義類別的類別屬性(class...
- 2Python class設計· parallel_processing
Python class設計. 建構子(constructor); 類別建構與初始化; str method; 用property 取代getters, setters; 類別屬性與實體屬性; ...
- 3[Python物件導向]解析Python物件導向設計的3種類型方法 ...
實體方法(Instance Method) · 類別方法(Class Method) · 靜態方法(Static Method) ...
- 4Python OOP物件導向設計的類型方法(Instance, Class, Static ...
基於讓程式碼便於閱讀與大量生產與維護之故,大家會採用物件導向(Object-oriented…. “Python OOP物件導向設計的類型方法(Instance, Class, ...
- 5淺談Python類別(Class) - 104學習精靈
Q:什麼是類別(Class)? 簡單來說,就是物件(Object)的藍圖(blueprint)。就像要生產一部汽車時,都會有設計圖,藉此可以知道此類汽車會有哪些特性及功能 ...