property 的详细使用方法
2024-08-23 00:28:13
property(fget=None, fset=None, fdel=None, doc=None)
俗话说条条大路通罗马,同样是完成一件事,Python 其实提供了好几个方式供你选择。
property() 是一个比较奇葩的BIF,它的作用把方法当作属性来访问,从而提供更加友好访问方式。
官方帮助文档代码:
- class C:
- def __init__(self):
- self._x = None
- def getx(self):
- return self._x
- def setx(self, value):
- self._x = value
- def delx(self):
- del self._x
- 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 函数修饰符(装饰器)的使用):
官方帮助文档代码:
- class C:
- def __init__(self):
- self._x = None
- @property
- def x(self):
- """I'm the 'x' property."""
- return self._x
- @x.setter
- def x(self, value):
- self._x = value
- @x.deleter
- def x(self):
- del self._x
复制代码
注意:三个处理 _x 属性的方法名要相同(参数不同)。
最新文章
- Swift使用注意
- 我所经历的JS性能优化
- AJAX案例三:处理XML响应
- Cloudera-Manager修改集群的IP
- MVC中System.InvalidOperationException: 传入字典的模型项的类型为“XXX”,但此字典需要类型“XXA”的模型项
- [原]Unity3D深入浅出 - 光源组件(Light)
- #pragma once 与 #ifndef 解析(转载)
- ios文件读取(二)
- Jquery将<;a>;链接变为post请求
- Hibernate级联操作解密(inverse和cascade)
- (10.19)Java小作业
- SecureCRT连接本地的Vmware虚拟机(CentOS)时提示连接超时“Connection timed out”
- 2017-12-19python全栈9期第四天第三节之iterable可迭代对象join之字符串和列表转换成字符串和range
- python 中获取列表的索引
- 原创科幻短篇《VR》
- HTML 点击图片放大
- 716. Max Stack实现一个最大stack
- yarn的学习-1-包管理工具
- CS1.6找金钱和人物血量
- 7.8 Models -- The Rest Adapter
热门文章
- PHP开发者的路书
- UVA 11426 GCD - Extreme (II) (欧拉函数)题解
- C# SQLite数据库操作
- Pyinstaller 中 pandas出错问题的解决(详细)
- JavaScript 问题解决 -- parseInt(";08";)或parseInt(";09";)转换返回0的解决方法
- windows cmd 命令和 linux 命令
- typeof
- spring boot:创建一个简单的web(maven web project)
- jsp post/get中接处理
- English trip -- VC(情景课)1 C What&#39;s your name?(review)