公开的数据成员可以在外部随意访问和修改,很难保证用户进行修改时提供新数据的合法性,数据很容易被破坏,并且也不符合类的封装性要求。解决这一问题的常用方法是定义私有数据成员,然后设计公开的成员方法来提供对私有数据成员的读取和修改操作,修改私有数据成员之前可以对值进行合法性检查,提高了程序的健壮性,保证了数据的完整性。属性是一种特殊形式的成员方法,结合了公开数据成员和成员方法的优点,既可以像成员方法那样对值进行必要的检查,又可以像数据成员一样灵活的访问。

Python 2.x中对象属性并没有提供太多保护机制,存在一些问题。在Python 3.x中属性得到了较为完整的实现,支持更加全面的保护机制。如果设置属性为只读,则无法修改其值,也无法为对象增加与属性同名的新成员,当然也无法删除对象属性。

下面的演示代码将属性设置为可读、可修改、可删除,如果不指定删除操作的方法将无法删除该属性,同理,如果不指定修改操作的方法则无法对属性的值进行修改。
>>> class Test:
    def __init__(self, value):
        self.__value = value

def __get(self):
        return self.__value

def __set(self, v):
        self.__value = v

#删除对象的私有数据成员

def __del(self):
        del self.__value

#可读、可写、可删除的属性

value = property(__get, __set, __del)

def show(self):
        print(self.__value)
>>> t = Test(3)
>>> t.show()
3
>>> t.value
3
>>> t.value = 5
>>> t.show()
5
>>> t.value
5
>>> del t.value
>>> t.value  #相应的私有数据成员已删除,访问失败
AttributeError: 'Test' object has no attribute '_Test__value'
>>> t.show()
AttributeError: 'Test' object has no attribute '_Test__value'
>>> t.value =1 #动态增加属性和对应的私有数据成员
>>> t.show()
1
>>> t.value
1

Python面向对象程序设计中属性的作用与用法相关推荐

  1. Python面向对象程序设计中对象析构方法的调用时机

    开学第一课:一定不要这样问老师Python问题 中国大学MOOC"Python程序设计基础"第6次开课时间 董付国老师Python系列教材推荐与选用参考 ============= ...

  2. python编程语言继承_Python面向对象程序设计类的封装与继承用法示例

    本文实例讲述了Python面向对象程序设计类的封装与继承用法.分享给大家供大家参考,具体如下: 访问限制(封装) 1.概念 面向对象语言的三大特征:封装, 继承, 多态. 广义的封装: 类和函数的定义 ...

  3. python面向对象程序设计实践(初级)——以《三国演义》中三英大战吕布为例

    python面向对象程序设计实践(初级) --以<三国演义>中三英大战吕布为例 设计实现思路: 定义武器类:武器名,攻击力 定义人物类:继承武器类,姓名,生命值 延时函数:延时0.5秒 实 ...

  4. python面向对象程序设计实践(高级)——以《三国演义》中三英大战吕布为例

    python面向对象程序设计实践(初级) --以<三国演义>中三英大战吕布为例 设计实现思路: 设计类 定义武器类:武器名,攻击力 定义人物类:继承武器类,姓名,生命值 设计函数简化对象的 ...

  5. 面向对象程序设计中“超类”和“子类”概念的来历

    众所周知,在面向对象程序设计中,子类从超类中继承数据成员和成员方法,然后在此基础上再根据实际需要进行扩展并增加属于子类的数据成员和成员方法.也就是说,子类的对象比超类的对象具有更加丰富的属性,或者具有 ...

  6. python核心编程:Python面向对象程序设计中类的定义、实例化、封装及私有变量/方法详解

    这篇文章主要介绍了Python面向对象程序设计中类的定义.实例化.封装及私有变量/方法,结合具体实例形式较为详细的分析了Python面向对象程序设计中类的定义.实例化.封装.私有变量.私有方法等相关使 ...

  7. Python 面向对象程序设计(一)

    面向对象程序设计 # 面向对象程序设计(英语:Object-oriented programming,缩写:OOP)是一种程序设计范型,同时也是一种程序开发的方法. #对象指的是类的实例.它将对象作为 ...

  8. python面向对象编程中_Python面向对象编程中关于类和方法

    类和实例 python是一个面向对象的语言,而面向对象最重要的概念就是类和实例, 记得刚学习的时候不太理解这些概念,直到老师说了一句"物以类聚". 没错就是类, 归类 物以类聚 类 ...

  9. python面向对象程序设计实训学生自我总结_Python面向对象程序设计示例小结

    本文实例讲述了Python面向对象程序设计.分享给大家供大家参考,具体如下: 示例1: #encoding:utf-8 '''example 1 class test: def __init__(se ...

最新文章

  1. Selenium(3)
  2. Maven2的配置文件settings.xml
  3. 【渝粤教育】国家开放大学2018年秋季 3818-22T燃气工程施工 参考试题
  4. python 如何判断excel单元格为空_如何用python处理excel(二)
  5. 看unix高级编程时遇到apue.h找不到的问题
  6. pyqt5在mac os 安装
  7. ios弧形进度条_iOS实现一个颜色渐变的弧形进度条
  8. Linux 配置Tomcat
  9. 把一个人的特点写具体作文_把一个人的特点写具体作文450字
  10. WebLogic简单抓鸡大法
  11. 全流程基于最新导则下的生态环境影响评价技术方法及图件制作
  12. U-Net在2022年相关研究的论文推荐
  13. 微软Excel 2007 框里打钩/打钩的方框选择
  14. MNE官网解读《Annotating continuous data》
  15. CWnd::FromHandle与CWnd::FromHandlePermanent有什么区别
  16. 捷径智慧物业系统助力“书香小区”建设
  17. android 键盘隐藏监听,Android监听键盘显示和隐藏
  18. java时间代码_java处理日期时间代码
  19. [摘录]知彼解己—同理心交流的原则
  20. 修改linux服务器nls_lang,Oracle下服务端字符集修改

热门文章

  1. webstorm 添加php插件,webstorm常用插件分享
  2. 89c51,8255,6个led数码管显示时钟的汇编语言程序,汇编语言要求编写一个时钟程序 用八位数码管实现时分秒的计时功能...
  3. html代码重排,是否有可能在html中格式化/重排html?
  4. mysql乐观锁与事务_Mysql中的读锁,写锁,乐观锁及事务隔离级别和并发问题
  5. android jackson 解析json字符串,一文搞定Jackson解析JSON数据
  6. git 怎么拉取线上代码到本地进行合并_android studio如何使用git提交、拉取、合并代码的操作...
  7. java定时刷新界面_Java定时更新数据---定时器
  8. 重定向拼接中文参数和特殊字符
  9. react-native调用安卓原生,如果调用没有参数的方法会报错,会提示没有加入参数.
  10. Toast.makeText(MainActivity.this, R.string.alert, Toast.LENGTH_SHORT).show(); 解释