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