• python-类的隐藏和封装


    7 """
      8 封装是面对对象的三大特征之一(另外两个是集成和多态),它指的是将对象>    的信息隐藏在对象的内部,不允许外部程序直接访问对象内部信息,而是通>    过该类锁提供的方法来实现对内部信息的操作和访问
      9 封装是面对对象编程语言对客观世界的模拟。对一个类或者对象进行良好的>    封装可以达到以下目的:
     10 1隐藏类的实现细节
     11 2让使用者稚嫩沟通过实现预定的方法来访问数据,从而可以在该方法中加>    入控制逻辑,限制对属性的不合理访问
     12 3可进行数据检查,从而有利于保证对象信息的完整性
     13 4便于修改,提高代码的可维护性
     14 5将兑现搞得属性和实现细节隐藏起来,不允许外部直接访问
     15 6把方法暴露出来,让方法来控制对这些属性进行安全的访问和操作
     16  
     17 """ 
     18 class user(object):
     19     def __hide(self):
     20         print('示范隐藏的hide方法')
     21     def getname(self):
     22         return self.__name
     23     def setname(self,name):
     24         if len(name) < 3:
     25             raise Exception("不符合标准")
     26         self.__name = name
     27     """
     28     读操作-getname()方法来实现
     29     写操作-setname()方法来实现
     30     """ 
     31     name = property(getname,setname)
     32     def setage(self,age):
     33         self.__age = age
     34     def getage(self):
     35         return self.__age
     36     """
     37     读操作-getage()方法来实现
     38     写操作-setage()方法来实现
     39     """
     40     age = property(getage,setage)
     41  
     42 u = user()
     43 """
     44 u.name = 'ff'
     45 这个程序试图将name属性赋值为ff,这个字符串的长度为2不符合我们所设定
        的赋值标准,则会抛出错误
     46 Traceback (most recent call last):
     47   File "test_class_packkeage.py", line 43, in <module>
     48     u.name = 'ff'
     49   File "test_class_packkeage.py", line 25, in setname
     50     raise Exception("不符合标准")
     51 Exception: 不符合标准
     52 """
     53 u.name = 'fff'#符合设定的标准
     54 """
     55 u.__hide()
     56 __hide()方法是隐藏的,如果支架调用则会报错
     57 Traceback (most recent call last):
     58   File "test_class_packkeage.py", line 54, in <module>
     59     u.__hide()
     60 AttributeError: 'user' object has no attribute '__hide'
     61 python其实没有真正的隐藏机制,双下划线只是python的一个小技巧,pytho    n会偷偷的改变以双下划线开头的属性名或者方法名,会在这些属性名和方法
        名前面添加_user__hide()
     62 """
     63 u._user__hide()
     64 #示范隐藏的hide方法
     65 #对隐藏的属性进行赋值
     66 u._user__name = "dd"
     67 #通过这种方式可以绕过我们所设定的检查机制不会抛出错误
     68                                 

    总结:python并没有提供真正的隐藏机制,如果程序希望隐藏类中的某些属性或者方法,那么只要在该成员的前面加上__.不过我们要知道的是,即使通过这种机制实现了隐藏,我们也可以绕过这些隐藏来调用这些成员

    笨鸟先飞
  • 相关阅读:
    UVa 10010 Where's Waldorf?
    boost 学习笔记
    C++ enum类型的一个更好的用法
    新浪面试题:删除字符串中多余的空格
    微软面试题:写程序找出二叉树的深度
    c++中sizeof的分析
    复习计划
    boost学习之 时间和日期 timer
    c++ template学习总结3
    微软面试题:反序一个单向链表
  • 原文地址:https://www.cnblogs.com/zoutingrong/p/13909302.html
Copyright © 2020-2023  润新知