大家好,我是大爆炸
在介绍@property前先介绍property() 。
property()构造函数返回property属性 。其语法是:
property(fget=None, fset=None, fdel=None, doc=None)property()参数:
- fget (optional) - 用于获取属性值,默认为None 。
- fset (optional) - 用于设置属性值,默认为None 。
- fdel (optional) - 用于删除属性值 。默认为None 。
- doc (optional) - 包含该属性的文档(docstring)的字符串 。默认为None 。
property()从给定的getter、setter和deleter返回property属性 。
- 如果没有给出参数,property()返回一个不包含任何getter、setter或deleter的基属性属性 。
- 如果没有提供doc,property()接受getter函数的文档字符串 。
class Person:def __init__(self, name):self._name = namedef get_name(self):print('Getting name')return self._namedef set_name(self, value):print('Setting name to ' + value)self._name = valuedef del_name(self):print('Deleting name')del self._name# Set property to use get_name, set_name# and del_name methodsname = property(get_name, set_name, del_name, 'Name property')p = Person('Adam')print(p.name)p.name = 'John'del p.name结果:Getting nameThe name is: AdamSetting name to JohnDeleting name这里,_name被用作私有变量,用于存储Person的名称 。我们还设置:
- getter方法get_name()来获取人员的姓名,
- setter方法set_name()来设置人员的姓名,
- deleter方法del_name()来删除人员的姓名 。
【Python中的property属性】如程序所示,内部引用p.name调用get_name()作为getter, set_name()作为setter, del_name()作为deleter,通过方法内部的打印输出 。
示例2:使用@property装饰器
可以使用Python装饰器@property来分配getter、setter和deleter,而不是使用property() 。
class Person:def __init__(self, name):self._name = name@propertydef name(self):print('Getting name')return self._name@name.setterdef name(self, value):print('Setting name to ' + value)self._name = value@name.deleterdef name(self):print('Deleting name')del self._namep = Person('Adam')print('The name is:', p.name)p.name = 'John'del p.name输出:Getting nameThe name is: AdamSetting name to JohnDeleting name这里使用了@property装饰器,而不是property() 。- 首先,指定name()方法也是Person的一个属性 。这是通过在getter方法之前使用@property来实现的 。
- 接下来,使用属性名来指定setter和deleter 。这是通过使用@name完成的 。@name.setter用于setter方法,@name.deleter用于deleter方法 。
推荐阅读
- Python数据分析——处理中国地区信息
- Python4要来了?快来看看Python之父怎么说
- Python如何构建自动在线刷视频
- 非常实用的 Python 库,推一次火一次
- Python中的菜单驱动程序
- 对比 Flask FastAPI - 一款新型的 Python Web 框架
- 15个Python入门小程序,你都知道哪些
- 用Python提取Verilog网表层次和实例化关系
- 使用 Python 将 MP4视频 转换为GIF动画
- python的面向对象编程
