17 Object Class
17 Object Class
17 Object Class
講師:林志偉
Class
- Build your own data type (1/2)
def remove_one(self):
self.stack.pop()
def size(self):
return len(self.stack)
def prettyprint(self):
for thing in self.stack[::-1]:
print('|_', thing, '_|')
Class Circle
# 建立 Class # main program
class Circle: a = Circle(10, 'red')
a.change_radius(20)
def __init__(self, radius, color): a.change_color('green')
self.radius = radius
self.color = color print(a.get_radius())
print(a.get_color())
def change_radius(self, radius): print(a.get_area())
self.radius = radius print(a.describe_circle())
def get_color(self):
return self.color
def get_area(self):
return (self.radius) **2 * 3.14
def describe_circle(self):
return f'It is a radius {self.radius} with {self.color} color'
#Lab
W3schools Exercises
需求: 在 w3schools.com中完成下列exercises
• classes
#Lab
建構 Class Rectangle
class Rectangle:
# main program
def __init__(self, width=1, length=1, line_color='white', body_color='white'):
self.width = width c = Rectangle(10, 'red') # bad assignment
self.length = length print('c:', c.describe())
self.line_color = line_color
self.body_color = body_color a = Rectangle(10, 20, 'red', 'pink')
self.line_width = 0.1 print('⻑⽅形 A: ', a.describe())
print('周⻑:', a.get_perimeter())
def change_size(self, width, legth):
pass b = Rectangle(1, 2, 'black', 'deep-blue')
print('⻑⽅形 B: ', b.describe())
def change_color(self, line_color, body_color): print('⼤⼩:', b.get_size())
pass
def get_size(self):
pass
def get_color(self):
pass
def get_area(self):
pass
def get_perimeter(self):
return 2 * (self.width + self.length)
def describe(self):
return f'這個⻑⽅形是 {self.width} * {self.length}. 線的顏⾊是{self.line_color}. 裡⾯顏⾊是{self.body_color}'
Backup
#Homework
需求:
請參考 Stack 的⽅式,撰寫程式來模擬佇列 (Queue 先進先出) ,意即先放入佇列的物件會先被取出
• 實作__init__⽅法
• 取得佇列的⻑度
• 新增⼀個物件到佇列
• 新增多個物件到佇列
• 從佇列裡移除⼀個物件
• 從佇列裡移除多個物件
• 顯⽰⽬前佇列的內容
• 實作程式並建立佇列物件,操作佇列驗證⽅法皆可正確執⾏
Object-Oriented Programming (OOP)
l 到⽬前為⽌,我們寫作的程式,都是寫⼀系列的 statement為主,加上 reusable 的函式,Python便會由上到下的執⾏
statement,這就是所謂的程序導向設計 (Procedure-Oriented Programming, POP)
l 雖然,Python的資料型別本⾝都是 object (像 str, int, float, list, set等),但由於我們在做程式設計時,並沒把物件 (Object) 當
成基本元件,融入我們設計程式的思考,所以在今天之前,基本上都是POP.
l 這種把物件 (Object) 當成基本元件,並在思考程式設計時,將物件建構跟使⽤納入其中,將object封裝進類別 (Class) ,以此
為主架構的就是物件導向設計 (Object-Oriented Programming, OOP)。
l OOP, 這個程式設計範式將「物件」作為程式的基本單元,將程式和資料封裝其中,以提⾼軟體的重⽤性、靈活性和擴充性
Object Consists of Properties and Methods
Class, Instance, Object
l Object (物件) 包含 properties
(attributes, 屬性) and methods
(⽅法),是某⼀個Class的實體存在
(instance), 是⼀個可操作的實體,
狀態會隨時改變,但架構與⾏為不
會改變,因其規範在Class內
l Class (類別) 可視為⼀個藍圖、⼀
個範本、⼀個可參考的文件,並沒
有實體存在
封裝 (Encapsulation)
使⽤類別的好處是可以將實作細節隱藏起來 (封裝),也不需詳細說明此類別的實作⽅式,只要告知提供
什麼功能,使⽤這個類別的⼈(程式設計師)完全不需知道實作細節,也不能擅⾃更動類別的設計。
這樣可以降低程式設計的複雜度,也能提⾼程式執⾏的穩定性