码迷,mamicode.com
首页 > 编程语言 > 详细

Python----面向对象---封装的意义

时间:2018-03-21 22:00:34      阅读:188      评论:0      收藏:0      [点我收藏+]

标签:封装数据   ini   inpu   通过   set   length   并且   固定   mon   

一、封装数据属性、明确区分内外:示例代码如下:

 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----面向对象---封装的意义

标签:封装数据   ini   inpu   通过   set   length   并且   固定   mon   

原文地址:https://www.cnblogs.com/xudachen/p/8619740.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!