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


一、封裝數據屬性、明確區分內外:示例代碼如下:

 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

調用者不關心后面的計算方式,只關心房間面積,如果要求體積,只需更改下公式,用戶調用不用發生改變

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM