python3 - property的使用
传统的绑定属性值,会把属性暴露出去,而且无法检查参数是否合法,如下:
class Test(object):
def __int__(self,age):
self.age = age
为了检查参数的合法性,可以设置一个get_age()方法,和一个set_age()方法,如下:
class Test(object):
def get_age(self):
return self.__age
def set_age(self,value):
if not instance(value,int):
raise ValueError('age must be an integer...')
if value <0 or value > 130:
rasie ValueError('age must between 0~130')
self.__age = value
但是,上面的例子,调用方法又时略显复杂,没有直接用属性这么直接简单。
python内置的@protery装饰器可以把一个方法变成属性来调用。
class Test(object):
@property
def age(self):
return self.__age
@age.setter
def age(self,value):
if not instance(value,int):
raise ValueError('age must be an integer...')
if value <0 or value > 130:
rasie ValueError('age must between 0~130')
self.__age = value
s = Test()
s.age = 100
print(s.age)
把一个getter方法变成属性,只需要加上@property就可以,同时,@property
本身又创建了另一个装饰器@age.setter
,负责把一个setter方法变成属性赋值,这样,我们就拥有一个可控的属性操作了。
最新文章
- saltstack命令执行过程
- Sublime Text的使用代码块安装的模块
- Webdriver API (三)- actions
- javascript 简单的计算器
- java 过滤器Filter中chain.doFilter()之前和之后代码的执行顺序
- HTMLImageElement类型的简便利用
- 使用OC和swift创建系统自带的刷新界面
- FastJSON应用前测试
- JS封闭函数、闭包、内置对象
- overlay 如何实现跨主机通信?- 每天5分钟玩转 Docker 容器技术(52)
- 深入浅出Java MVC(Model View Controller) ---- (JSP + servlet + javabean实例)
- 使用kubeadm部署Kubernetes集群
- JAVA记录-WebService开发部署
- python--selenium简单模拟百度搜索点击器
- c++之菱形继承问题
- adb 切换android输入法
- C/C++获取文件后缀名并且比较
- python之concurrent.futures模块
- datagridview 如何禁止行被选中
- promise总结
热门文章
- 通过案例对SparkStreaming透彻理解三板斧之三
- vue - check-version
- FBXImport
- 修改 Ubuntu 13.04 LAMP 服务器端口号
- 【Java】Java_04 HelloWorld提升
- CoolHash数据库引擎压测对比报告
- csv导出文件中有html
- android 静态和动态设置 Receiver的 android:enabled值
- atitit.解决struts2&#160;SpringObjectFactory.getClassInstance&#160;NullPointerException&#160;&#160;v2&#160;q31
- Android JNI和NDK学习(01)--搭建NDK开发环境(转)