传统的绑定属性值,会把属性暴露出去,而且无法检查参数是否合法,如下:

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方法变成属性赋值,这样,我们就拥有一个可控的属性操作了。

最新文章

  1. saltstack命令执行过程
  2. Sublime Text的使用代码块安装的模块
  3. Webdriver API (三)- actions
  4. javascript 简单的计算器
  5. java 过滤器Filter中chain.doFilter()之前和之后代码的执行顺序
  6. HTMLImageElement类型的简便利用
  7. 使用OC和swift创建系统自带的刷新界面
  8. FastJSON应用前测试
  9. JS封闭函数、闭包、内置对象
  10. overlay 如何实现跨主机通信?- 每天5分钟玩转 Docker 容器技术(52)
  11. 深入浅出Java MVC(Model View Controller) ---- (JSP + servlet + javabean实例)
  12. 使用kubeadm部署Kubernetes集群
  13. JAVA记录-WebService开发部署
  14. python--selenium简单模拟百度搜索点击器
  15. c++之菱形继承问题
  16. adb 切换android输入法
  17. C/C++获取文件后缀名并且比较
  18. python之concurrent.futures模块
  19. datagridview 如何禁止行被选中
  20. promise总结

热门文章

  1. 通过案例对SparkStreaming透彻理解三板斧之三
  2. vue - check-version
  3. FBXImport
  4. 修改 Ubuntu 13.04 LAMP 服务器端口号
  5. 【Java】Java_04 HelloWorld提升
  6. CoolHash数据库引擎压测对比报告
  7. csv导出文件中有html
  8. android 静态和动态设置 Receiver的 android:enabled值
  9. atitit.解决struts2&#160;SpringObjectFactory.getClassInstance&#160;NullPointerException&#160;&#160;v2&#160;q31
  10. Android JNI和NDK学习(01)--搭建NDK开发环境(转)