python 面向对象七 property() 函数和@property 装饰符
2024-09-30 12:49:14
一、property引入
为了使对象的属性不暴露给调用者和进行属性值检查,设置了访问属性的接口函数,使用函数访问属性,并可以在函数内部检查属性。
>>> class Student(object):
def get_score(self):
return self._score
def set_score(self, value):
if not isinstance(value, int):
raise ValueError('score must be an integer!')
if value < or value > :
raise ValueError('score must between 0 ~ 100!')
self._score = value >>> s = Student()
>>> s.set_score()
>>> s.get_score()
这样每次访问属性的时候,都要访问函数,相比较之前直接访问属性的方式,变得麻烦了。property可以解决这个麻烦,虽然还是函数,但是可以像属性一样访问。
二、property装饰器方法:
>>> class C:
def __init__(self):
self.__x = None
@property
def x(self):
return self.__x
@x.setter
def x(self,value):
self.__x=value
@x.deleter
def x(self):
del self.__x >>> c = C()
>>> c.x
>>> c.x =
>>> c.x
三、property函数方法:
>>> class C:
def __init__(self):
self.__x = None
def getx(self):
return self.__x
def setx(self, value):
self.__x = value
def delx(self):
del self.__x
x = property(fget=getx,fset=setx,fdel=delx, doc='') >>> c = C()
>>> c.x =
>>> c.x >>> del c.x
>>> c.x
Traceback (most recent call last):
File "<pyshell#64>", line , in <module>
c.x
File "<pyshell#59>", line , in getx
return self.__x
AttributeError: 'C' object has no attribute '_C__x'
最新文章
- Android热修复技术选型(不在市场发布新版本的情况下,直接更新app)
- CentOS关闭火狐浏览器Flash过期提示
- 20145225《Java程序设计》 2015—2016年学期课程总结
- WPF后台设置xaml控件的样式System.Windows.Style
- 页面间(窗口间)的取值赋值及获取iframe下的window对象
- 搭建SpringMVC+MyBatis开发框架二
- linux进程调度之 FIFO 和 RR 调度策略---SYSTEMTAP
- S-CMS企建v3二次SQL注入
- Codeforces Round #423 (Div. 2, rated, based on VK Cup Finals) E. DNA Evolution 树状数组
- java:try...catch...finally
- Unity 获取指定资源目录下的所有文件
- 结合MongoDB开发LBS应用(转)
- Redis与RabbitMQ作为消息队列的比较
- mongodbtemplate配置
- arduino IO口
- CSS选择器-常用搜集
- Go语言入门之切片的概念
- 深度学习基础系列(一)| 一文看懂用kersa构建模型的各层含义(掌握输出尺寸和可训练参数数量的计算方法)
- ECharts学习总结(二):标签式单文件引入echarts的方法
- react native android 应用状态(前端或后台)的判断
热门文章
- POJ 2348 Euclid&#39;s Game【博弈】
- poj——2771 Guardian of Decency
- uva 10559
- 某考试 T1 table
- Java实验--继承与多态
- MySQL查询count(*)、count(1)、count(field)的区别收集
- python绘图入门
- iOS iOS8中 问题&;quot;registerForRemoteNotificationTypes: is not supported in iOS 8.0 and later&;quot; 解决方式
- CF 234 C Weather(粗暴方法)
- 无限级分类Asp.net Mvc实现