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

Posted xudachen

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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

调用者不关心后面的计算方式,只关心房间面积,如果要求体积,只需更改下公式,用户调用不用发生改变

 

以上是关于Python----面向对象---封装的意义的主要内容,如果未能解决你的问题,请参考以下文章

python面向对象三大特性之封装

python_面向对象之多态封装

Python的面向对象特性

面向对象的封装继承多态

设计模式之美——封装,继承,多态的意义

第五章---面向对象---1.封装之如何实现属性的隐藏/2.封装的意义/3.封装与扩展性/4.property的使用