zoukankan      html  css  js  c++  java
  • 4.1.5 属性

      公开的数据成员可以在外部随意访问和修改,很难控制用户修改时新数据的合法性。解决这一问题的常用方法是定义私有数据成员,然后设计公开的成员方法来提供对私有数据成员的读取和修改操作,修改私有数据成员时可以对值进行合法性检查,提高了程序的健壮性,保证了数据的完整性。属性结合了公开数据成员和成员方法的有点,既可以像成员方法那样对值进行必要的检查,又可以像数据成员一样灵活地访问。

     1 class Test():
     2     def __init__(self,value):
     3         self.__value = value       #私有数据成员
     4 
     5     @property                      #修饰器,定义属性,提供对私有数据成员的访问
     6     def value(self):               #这样就定义了一个只读属性,只读属性无法修改值和删除
     7         return self.__value
     8 
     9 if __name__ == '__main__':
    10     t = Test(3)
    11 
    12     t.v = 5                        #为实例动态增加新成员
    13     del t.v                        #动态删除成员
    14     del t.value                    #试图删除对象属性,会报错的
    15 
    16 '''
    17 Traceback (most recent call last):
    18   File "C:/Users/dddd/PycharmProjects/untitled5/test1.py", line 14, in <module>
    19     del t.value     #试图删除对象属性,会报错的
    20 AttributeError: can't delete attribute
    21 '''

      下面的代码则把属性设置为可读、可修改,而不允许删除。

     1 class Test:
     2     
     3     def __init__(self,value):
     4         self.__value = value
     5         
     6     def __get(self):                #读取私有数据成员的值
     7         return self.__value   
     8     
     9     def __set(self,v):              #设置私有数据成员的值
    10         self.__value = v
    11         
    12     value = property(__get,__set)   #可读可写属性,指定相应的读写方法
    13     
    14     def show(self):
    15         print(self.__value)
    16         
    17         
    18         
    19 if __name__ == '__main__':
    20     t = Test(3)
    21     t.value                       #允许读取属性值
    22     t.value = 5                   #允许修改属性值
    23     t.show()                      #属性对应的私有变量也得到了相应的修改
    24     del t.vaue                    #试图删除属性,但会报错

      当然,也可以将属性设置为可读、可修改、可删除。

     1 class Test:
     2 
     3     def __init__(self,value):
     4         self.__value = value
     5 
     6     def __get(self):                      #读取私有数据成员的值
     7         return self.__value
     8 
     9     def __set(self,v):                    #设置私有数据成员的值
    10         self.__value = v
    11         
    12     def __del(self):                      #删除对象的私有数据成员
    13         del self.__value
    14 
    15     value = property(__get,__set,__del)   #可读可写可删除属性,指定相应的读写删除方法
    16 
    17     def show(self):
    18         print(self.__value)
    19 
    20 
    21 
    22 if __name__ == '__main__':
    23     t = Test(3)
    24     t.value                       #允许读取属性值
    25     t.value = 5                   #允许修改属性值
    26     t.show()                      #属性对应的私有变量也得到了相应的修改
    27     del t.value                   #这样就能删除实例的私有数据成员
    28     
    29     t.value = 1                   #为对象动态增加属性和对应私有数据成员
    30     t.show()
    31     t.value
  • 相关阅读:
    建站始末——(转载)
    阿里云——大神建个人网站分享(转载)
    从零开始建设个人网站
    前端资料——书籍
    【python】*与** 参数问题
    【python】python异常类型
    【python】unittest中常用的assert语句
    【性能测试】性能测试总结<四>
    【性能测试】性能测试总结<三>
    【性能测试】性能测试总结<二>
  • 原文地址:https://www.cnblogs.com/avention/p/8637279.html
Copyright © 2011-2022 走看看