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

笨鸟先飞
原文地址:https://www.cnblogs.com/zoutingrong/p/13909302.html