版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
介绍公有成员与私有成员、保护类型成员、property类成员的可见性CHAPTER701公有成员与私有成员02保护类型成员CONTENTS目
录03property类成员的可见性“隐藏”在类的内部内外可见类内外访问交互在Python中,默认情况对于某些成员来说,它的作用是用于在类的内部保存一些中间数据或临时方法,因此,希望能用某种机制将这些成员“隐藏”在类的内部,以避免被外部用户直接修改或调用成员的可见性类的内外都能访问的成员公有成员私有成员只能在类的内部进行访问公有成员与私有成员成员的可见性实现名义上隐藏,被附加“_类名”表示成员是公有还是私有相关信息隐藏起来,留必要访问接口设
置私有成员
约定的命名规范命名改写成员的可见性私
有
成
员当一个成员的名称以至少两个下划线开头,且结尾至多有一个下划线时,则表明该成员是私有成员,只能在类的内部访问,而不能在类的外面通过实例对象直接访问成员的可见性实现名义上隐藏,被附加“_类名”表示成员是公有还是私有相关信息隐藏起来,留必要访问接口设
置私有成员
约定的命名规范命名改写成员的可见性>>>classMyClass():def__init__(self):self.__private_value=123#私有属性deffun(self): self.__foo()#类内部可以直接访问私有方法print(self.__private_value)#类内部可直接访问私有属性def__foo(self):#私有方法 print('HelloWorld')>>>a=MyClass()>>>a.fun()#类外部可以直接访问公有方法HelloWorld123>>>a.__private_value#类外面不能直接访问私有属性Traceback(mostrecentcalllast):
【例】
用户可以通过这个改写后的名字访问到私有成员实例成员的可见性
File"<stdin>",line1,in<module>AttributeError:'MyClass'objecthasnoattribute'__private_value'>>>a._MyClass__private_value#通过改写后的名字访问私有属性123>>>a.__foo()#类外面不能直接访问私有方法Traceback(mostrecentcalllast):
File"<stdin>",line1,in<module>AttributeError:'Student'objecthasnoattribute'__foo'>>>a._MyClass__foo()#通过改写后的名字访问私有方法HelloWorld
【例】
用户可以通过这个改写后的名字访问到私有成员实例成员的可见性保护类型成员保护类型成员双下划线单下划线在类及其派生类内部访问的成员用命名方式提醒该成员应该被保护成员的可见性property类存在的潜在漏洞在后续的运算可能就会出现类型或者逻辑错误用“.”运算符读写缺点是不能对读写进行额外的控制,非法赋值埋下漏洞成员的可见性【例】将Student类的出生年属性设置成公有,多输入0>>>fromdatetimeimportdate>>>classStudent:def__init__(self,name,year):=nameself.birthyear=year>>>mike=Student("Mike",19820)>>>mike.birthyear=19820程序未提示错误成员的可见性设置相应的读和写方法为了在读写属性时增加其它的诸如合法性检查的额外操作,并且提高程序的可扩展性1property的类实现将需要设置特别读写的实例属性设置为私有成员然后再使用读写方法来实例化property的类属性2实现读写操作在使用中用户只对这个property属性进行读写3读写成员的可见性【例】自动访问相应的读写方法来实现实例属性的合法读写>>>classStudent:def__init__(self,name):self.__name=nameself.__score=0defgetname(self):print("调用getname方法")returnself.__namedefgetscore(self):print("调用getscore方法")returnself.__scoredefsetscore(self,score):print("调用setscore方法")returnself.__score成员的可见性defsetscore(self,score):print("调用setscore方法")ifscore>=0andscore<=100:self.__score=scoreelse:raiseValueError("错误的参数值")#出现非法参数时抛出一个异常score=property(getscore,setscore)#第1个参数为读方法,第2个参数为写方法,用于控制可读写属性name=property(getname)#只提供读方法,用于控制只读属性>>>a=Student('Mike')>>>a.score=50#相当于执行a.setscore(50)调用setscore方法>>>a.score=500#相当于执行a.setscore(500)成员的可见性调用setscore方法Traceback(mostrecentcalllast):File"<stdin>",line1,in<module>File"<stdin>",line16,insetscoreraiseValueError("错误的参数值")ValueError:错误的参数值>>>a.score#相当于执行a.getscore()调用getscore方法50>>>#相当于执行a.getname()调用getname方法'Mike'>>>='John'#对只读属性进行写操作,返回错误Traceback(mostrecentcalllast):File"<stdin>",line1,in<module>AttributeError:can'tsetattribute成员的可见性getscore/setscore
额外的读写方法名“装饰器(decorator)”
语法糖
简化上述代码
property对象名
在读方法前加@property
在写方法前加@[property对象名].setter简化
property
对象成员的可见性【例】针对Student类,用装饰器语法可改写成如下形式>>>classStudent:def__init__(self,name):self.__name=nameself.__score=0@propertydefname(self):print("调用name的读方法")returnself.__name@propertydefscore(self):print("调用score的读方法")returnself.__score@score.setterdefscore(self,score):成员的可见性print("调用score的读方法")returnself.__score@score.setterdefscore(self,score):print("调用score的写方法")ifscore>=0andscore<=100:self.__score=scoreelse:raiseValueError("错误的参数值")>>>a=Student('Mike')>>>a.score=50调用score的写方法>>>a.score=500调用score的写方法Traceback(mostrecentcalllast):File"<stdin>",line1,in<module>File"<stdin>",line16,insetsco
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 徐州工程学院《外科学》2025-2026学年期末试卷
- 电力应急抢修员故障抢修考试题目及答案
- But-3-yn-1-yl-methanesulfonate-生命科学试剂-MCE
- 蒸馏炉工岗前技术知识考核试卷含答案
- 2026年医疗设备操作维护面试题集
- 海底管道防腐工安全知识竞赛评优考核试卷含答案
- 化学气相淀积工安全生产能力评优考核试卷含答案
- 2026年求职者如何准备跨文化交际的面试环节
- 2026年阿里巴巴产品经理职位面试宝典及题目解析
- 2026年农村危房改造申请题库
- 《燃煤火力发电企业设备检修导则》
- 育苗温室大棚施工组织设计方案-2
- 《国际贸易实务》课件-第四章-交易磋商
- 驾照体检表完整版本
- 中国主要地质灾害
- 数据密集型科学研究范式课件
- 中医治疗“乳岩”医案44例
- JJF 2020-2022 加油站油气回收系统检测技术规范
- PVC-U国标排水管件价格表
- 头颅MRI入门必修之读片知识
- DDI-目标授权培训课件
评论
0/150
提交评论