前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python面向对象程序设计中属性的作用与用法

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

作者头像
Python小屋屋主
发布2018-04-16 16:17:48
9190
发布2018-04-16 16:17:48
举报
文章被收录于专栏:Python小屋Python小屋

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

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

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2017-01-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Python小屋 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档