• 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

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

  • 相关阅读:
    一个Web文件上传的C#源代码
    DataSets and Serialization 数据集和序列化 (英文版)
    如何在Unity中播放影片
    靠边伸缩菜单的做法(类似QQ,碰到就会伸出来)
    Lightmapper
    Unity官方教學專案 Character Customization (紙娃娃系統)
    unity3d用鼠标拖动物体的一段代码
    [unity3d程序] 颜色渐变效果
    C# typeof()实例详解
    XNA Billboard(公告板技术)
  • 原文地址:https://www.cnblogs.com/xudachen/p/8619740.html
Copyright © 2020-2023  润新知