绑定属性时,如果直接把属性暴露出去,虽然写起来很简单,但无法对参数进行检查,导致属性被随便修改
因此,可以通过在类内定义get()获取属性值,定义set()对属性值进行设定并对设定值进行检查

但通过定义get()和set()会让程序显得复杂,没有直接用属性这么直接简单
Python内置的@property装饰器就是用来负责把一个方法变成属性调用的,它可以通过更加简单的方式来实现上述功能而无需自定义get()和set()
@property广泛应用在类的定义中,可以让调用者写出简短的代码,同时保证对参数进行必要的检查,这样,程序运行时就减少了出错的可能性

class Student(object):

    @property
def score(self):
return self._score @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 @property
def birth(self):
return self._birth @birth.setter
def birth(self, value): #birth是可读写属性,因为它有setter
self._birth = value #还可以定义只读属性,只定义getter方法,不定义setter方法就是一个只读属性
@property
def age(self): #age就是一个只读属性,因为它没有setter
return 2019 - self._birth s = Student()
s.score = 60 # OK,实际转化为s.set_score(60)
print(s.score) # 输出:60,实际转化为s.get_score()
s.score = 9999 # 报预定错误
s.birth = 1988 # OK,实际转化为s.set_birth(1988)
print(s.birth) # 输出:1988,实际转化为s.get_birth()
print(s.age) # 输出:31,实际转化为s.get_age()

参数检查(@property)的更多相关文章

  1. python定义函数以及参数检查

    (转自廖雪峰网站) 函数定义 在Python中,定义一个函数要使用def语句,依次写出函数名.括号.括号中的参数和冒号:,然后,在缩进块中编写函数体,函数的返回值用return语句返回. 我们以自定义 ...

  2. OpenJDK源码研究笔记(一)-参数检查&抛出带关键错误提示信息的异常

    OpenJDK源码研究笔记系列文章,是我在阅读OpenJDK7源码的过程中的一些体会.收获.看法. 把研究过程中的成长和收获一点点地整理出来,是对自己研究学习的一个小结,也有可能给学习Java的一些同 ...

  3. Catel帮助手册-Catel.Core:(1)参数检查

      我们检查方法是否正确,一般是返回对错,或者是是否抛出一个异常,大部分人不检查异常的正确性,那么这种错误在很深的堆栈中,很难查看. Catel与一般的检查方法不同,一般是使用   public vo ...

  4. golang 防SQL注入 基于反射、TAG标记实现的不定参数检查器

    收到一个任务,所有http的handler要对入参检查,防止SQL注入.刚开始笨笨的,打算为所有的结构体写一个方法,后来统计了下,要写几十上百,随着业务增加,以后还会重复这个无脑力的机械劳作.想想就l ...

  5. pyextend库-accepts函数参数检查

    pyextend - python extend lib accepts(exception=TypeError, **types) 参数: exception: 检查失败时的抛出异常类型 **typ ...

  6. Eclipse 中的 parameter参数,property属性,preference首选项 区别

    parameter参数 1.配置框架 web.xml <init-param> <param-name>contextConfigLocation</param-name ...

  7. linux和aix内核参数检查

    安装oracle软件时需要设置操作系统级别的用户限制,后期检查可以使用如下命令,方便问题的排查工作 linux: tail -15 /etc/security/limits.conf tail -30 ...

  8. SpringBoot 参数检查 Controller中检查参数是否合法

    springboot 验证 默认使用的是hibernate validator ,不用额外增加引用包,springboot已经内置包含. 设置pom相关依赖 <?xml version=&quo ...

  9. WebApi参数检查验证FluentValidation的使用方法

    右键打开NuGet程序包管理,进入浏览,搜索 FluentValidation,点击下载 在Model文件夹添加一个Person类进行校验 校验前,using需要引入相应的命名空间方可使用,Abstr ...

随机推荐

  1. Python语法速查: 16. 时间日期处理

    返回目录 (1)datetime模块 datetime模块可以处理时间和日期,其中包含以下类:date类.time对象.datetime对象.timedelt对象.tzinfo对象. ● date类 ...

  2. windows的两种sshd服务器安装

    关于windows的服务器,后来好像微软发布了专用的windows ssh服务器组件.通过win 10的linux子系统因该是可以安装ssh服务器.这两种都没有使用过. 有一个freesshd的免费软 ...

  3. C# loop executed one by one wait the former completed

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

  4. C# winfrom调用摄像头扫描二维码(完整版)

    前段时间看到一篇博客,是这个功能的,参考了那篇博客写了这个功能玩一玩,没有做商业用途.发现他的代码给的有些描述不清晰的,我就自己整理一下发出来记录一下. 参考博客链接:https://www.cnbl ...

  5. 文件批量生成IO流读写

    /// <summary> /// 生成文件的 /// </summary> /// <param name="calssName"></ ...

  6. 【SDUT】2019SDUTACM第一次选拔赛 F- X的追求道路

    Problem Description X在大家的帮助下终于找到了一个妹纸,于是开始了漫漫的追求之路,那么大家猜一猜X能不能追的上呢? X初始对妹纸有一个心动值,妹纸对X有一个好感值,在追求时发生的的 ...

  7. .netcore 中使用开源的AOP框架 AspectCore

    AspectCore Project 介绍 什么是AspectCore Project ? AspectCore Project 是适用于Asp.Net Core 平台的轻量级 Aop(Aspect- ...

  8. 「SAP技术」已启用质检物料创建PO时候'STOCK TYPE'没有默认为X?

    「SAP技术」 SAP MM 已启用质检物料创建PO时候'STOCK TYPE'没有默认为X? Part I:SAP 标准行为 1, 物料11002335, QM视图里 01 inspection t ...

  9. [转]Paste from Excel into C# app, retaining full precision

    本文转自:https://stackoverflow.com/questions/8614910/paste-from-excel-into-c-sharp-app-retaining-full-pr ...

  10. SAP MM 供应商无英文名称,ME21N里却带出了英文名字?

    SAP MM 供应商无英文名称,ME21N里却带出了英文名字? 近日收到客户业务用户上报的一个问题说ME21N的时候,供应商101071的名字怎么是英文名字,实际上供应商主数据里是没有这个英文名字, ...