@property for Python
来源:互联网 发布:章莹颖死亡细节知乎 编辑:程序博客网 时间:2024/05/23 00:31
@property
解决的问题:
- 调用方法像直接用属性一样直接简单。
思路:
- 将方法包安装成属性。
- 即对
def fun()
方法进行包装。
- 即对
- 将方法包安装成属性。
Python内置的@property装饰器就是负责把一个方法变成属性调用的
==============================================
无@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 < 0 or value > 100: raise ValueError('score must between 0 ~ 100!') self._score = value
分析:
- 一个
get_score
方法, 一个set_score
方法
>>> s = Student()>>> s.set_score(60) # ok!>>> s.get_score()60>>> s.set_score(9999)Traceback (most recent call last): ...ValueError: score must between 0 ~ 100!
有@property
class Student(object): # AA处get @property def score(self): return self._score # BB处set @score.setter def score(self, value): if not isinstance(value, int): raise ValueError('score must be an integer!') if value < 0 or value > 100: raise ValueError('score must between 0 ~ 100!') self._score = value
分析:
- 给score方法加上@property,self_score为实例的假私有属性。可能理解为:对score进行包装成Student的类属性。
- 给score方法又加上@score.setter。可以理解为:对.score方法当做属性用时去执行BB处的代码。(一般先有属性,再去设置改变属性)
- 把一个getter方法变成属性,只需要加上@property就可以了,此时,@property本身又创建了另一个装饰器@score.setter,负责把一个setter方法变成属性赋值,于是,我们就拥有一个可控的属性操作。
>>> s = Student()>>> s.score = 60 # OK,实际转化为s.set_score(60)>>> s.score # OK,实际转化为s.get_score()60>>> s.score = 9999Traceback (most recent call last): ...ValueError: score must between 0 ~ 100!
结论:
装饰后可以直接使用s.score,s.score=scoreNo;而不像无装饰前s.get_score(),s.set_score(60)那样将【设置参数放在括号里去设置】和【方法()】访问。
以上:解决了调用方法像直接用属性一样直接用的问题,使使用起来更加简单。
0 0
- @property for Python
- python -- property()/@property
- python @property
- Python @property
- Python @property
- Python @property
- python @property
- python Property
- Python @property
- python property
- python property
- python @property
- Python @property
- python property
- python property
- Python @property
- python-property
- python @property
- Linux redis服务基本配置操作
- mysql jdbc 连接数据库
- Linux脚本使用find 查找文件
- 递推递归练习N青蛙过河
- Spring4学习:Spring的事务管理
- @property for Python
- asla架构和alsa-lib音频库的移植
- 网上的权限系统demo
- 用java调用C或C++动态链接库原来如此简单
- 从下方弹出的PopupWindow,仿iphone效果,增加半透明蒙层。
- android的消息机制——Handler机制
- unity开发xbox手柄 驱动坑
- Spring的JDBCTemplate的基本代码操作,这里没用c3p0连接池,用的自带连接池。
- java基础面试题