1. 程式人生 > >Python----面向對象---封裝的意義

Python----面向對象---封裝的意義

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----面向對象---封裝的意義