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

    笨鸟先飞
  • 相关阅读:
    第十四周 Leetcode 315. Count of Smaller Numbers After Self(HARD) 主席树
    POJ1050 To the Max 最大子矩阵
    POJ1259 The Picnic 最大空凸包问题 DP
    POJ 3734 Blocks 矩阵递推
    POJ2686 Traveling by Stagecoach 状态压缩DP
    iOS上架ipa上传问题那些事
    深入浅出iOS事件机制
    iOS如何跳到系统设置里的各种设置界面
    坑爹的私有API
    业务层网络请求封装
  • 原文地址:https://www.cnblogs.com/zoutingrong/p/13909302.html
Copyright © 2011-2022 走看看