Python----面向對象---封裝的意義
阿新 • • 發佈:2018-03-21
info inpu 隔離 復雜 div 通過 blog 公式 urn
一、封裝數據屬性、明確區分內外:示例代碼如下:
1 class People: 2 def __init__(self, name, age): 3 self.__name = name 4 self.__age = age 5 6 def tell_info(self): 7 print(‘Name:<%s> Age<%s>‘ % (self.__name, self.__age)) 8 9 p = People(‘egon‘, 18) 10 p.tell_info() 11 12結果為: 13 Name:<egon> Age<18>
可以防止外部直接修改隱藏屬性,並且提供了一個接口,按照固定的格式向調用者輸出信息
也可以提供修改隱藏屬性的接口,讓調用者通過接口修改隱藏的屬性,並且可以寫上控制邏輯
例如:
1 def set_info(self, name, age): 2 if not isinstance(name, str): 3 print(‘名字必須是字符串類型‘) 4 return 5 if not isinstance(age, int):6 print(‘年齡必須是數字類型‘) 7 return 8 self.__name = name 9 self.__age = age 10 11 12 p = People(‘egon‘, 18) 13 # p.tell_info() 14 15 p.set_info(‘EGON‘, 18) 16 p.tell_info() 17 18 結果為: 19 20 Name:<EGON> Age<18>
可以看出,修改成功了,並且加上了控制,不讓調用者隨意更改
二、隔離復雜度
例如:
1 class ATM: 2 def __card(self): 3 print(‘插卡‘) 4 5 def __auth(self): 6 print(‘用戶認證‘) 7 8 def __input(self): 9 print(‘輸入取款金額‘) 10 11 def __print_bill(self): 12 print(‘打印賬單‘) 13 14 def __take_money(self): 15 print(‘取款‘) 16 17 def withdraw(self): 18 self.__card() 19 self.__auth() 20 self.__input() 21 self.__print_bill() 22 self.__take_money() 23 24 a = ATM() 25 a.withdraw() 26 27 結果為: 28 29 插卡 30 用戶認證 31 輸入取款金額 32 打印賬單 33 取款
用戶只關註取款,至於裏面怎麽實現,用戶並不關註
三、擴展性高
一個求房間面積的例子,如下:
1 class Room: 2 def __init__(self, name, owner, weight, length): 3 self.name = name 4 self.owner = owner 5 6 self.__weight = weight 7 self.__length = length 8 9 def tell_area(self): 10 return self.__weight * self.__length 11 12 r = Room(‘衛生間‘, ‘alex‘, 10, 10) 13 print(r.tell_area()) 14 15 結果為: 16 100
調用者不關心後面的計算方式,只關心房間面積,如果要求體積,只需更改下公式,用戶調用不用發生改變
Python----面向對象---封裝的意義