property(fget=None, fset=None, fdel=None, doc=None) 

俗话说条条大路通罗马,同样是完成一件事,Python 其实提供了好几个方式供你选择。

property() 是一个比较奇葩的BIF,它的作用把方法当作属性来访问,从而提供更加友好访问方式。

官方帮助文档代码:

  1. class C:
  2. def __init__(self):
  3. self._x = None
  4. def getx(self):
  5. return self._x
  6. def setx(self, value):
  7. self._x = value
  8. def delx(self):
  9. del self._x
  10. x = property(getx, setx, delx, "I'm the 'x' property.")

复制代码

property() 返回一个可以设置属性的属性,当然如何设置属性还是需要我们人为来写代码。第一个参数是获得属性的方法名(例子中是 getx),第二个参数是设置属性的方法名(例子中是 setx),第三个参数是删除属性的方法名(例子中是 delx)。

property() 有什么作用呢?举个例子,在上边的例题中,我们为用户提供 setx 方法名来设置 _x 属性,提供 getx 方法名来获取属性。但是有一天你心血来潮,突然想对程序进行大改,可能你需要把 setx 和 getx 修改为 set_x 和 get_x,那你不得不修改用户调用的接口,这样子的体验就非常不好。

有了 property() 所有问题就迎刃而解了,因为像上边一样,我们为用户访问 _x 属性只提供了 x 属性。无论我们内部怎么改动,只需要相应的修改 property() 的参数,用户仍然只需要去操作 x 属性即可,对他们来说没有任何影响。

使用属性修饰符创建描述符

使用属性修饰符创建描述符,也可以实现同样的功能(【扩展阅读】Python 函数修饰符(装饰器)的使用):

官方帮助文档代码:

  1. class C:
  2. def __init__(self):
  3. self._x = None
  4. @property
  5. def x(self):
  6. """I'm the 'x' property."""
  7. return self._x
  8. @x.setter
  9. def x(self, value):
  10. self._x = value
  11. @x.deleter
  12. def x(self):
  13. del self._x

复制代码

注意:三个处理 _x 属性的方法名要相同(参数不同)。

最新文章

  1. Swift使用注意
  2. 我所经历的JS性能优化
  3. AJAX案例三:处理XML响应
  4. Cloudera-Manager修改集群的IP
  5. MVC中System.InvalidOperationException: 传入字典的模型项的类型为“XXX”,但此字典需要类型“XXA”的模型项
  6. [原]Unity3D深入浅出 - 光源组件(Light)
  7. #pragma once 与 #ifndef 解析(转载)
  8. ios文件读取(二)
  9. Jquery将<a>链接变为post请求
  10. Hibernate级联操作解密(inverse和cascade)
  11. (10.19)Java小作业
  12. SecureCRT连接本地的Vmware虚拟机(CentOS)时提示连接超时“Connection timed out”
  13. 2017-12-19python全栈9期第四天第三节之iterable可迭代对象join之字符串和列表转换成字符串和range
  14. python 中获取列表的索引
  15. 原创科幻短篇《VR》
  16. HTML 点击图片放大
  17. 716. Max Stack实现一个最大stack
  18. yarn的学习-1-包管理工具
  19. CS1.6找金钱和人物血量
  20. 7.8 Models -- The Rest Adapter

热门文章

  1. PHP开发者的路书
  2. UVA 11426 GCD - Extreme (II) (欧拉函数)题解
  3. C# SQLite数据库操作
  4. Pyinstaller 中 pandas出错问题的解决(详细)
  5. JavaScript 问题解决 -- parseInt("08")或parseInt("09")转换返回0的解决方法
  6. windows cmd 命令和 linux 命令
  7. typeof
  8. spring boot:创建一个简单的web(maven web project)
  9. jsp post/get中接处理
  10. English trip -- VC(情景课)1 C What's your name?(review)