property()构造返回property属性。
property()的语法为:
property(fget=None, fset=None, fdel=None, doc=None)
推荐阅读: Python @property:如何使用它以及为什么?
property()采用四个参数:
fget(可选) -用于获取属性值的函数。默认为None。
fset(可选) -用于设置属性值的函数。默认为None。
fdel(可选) -用于删除属性值的函数。默认为None。
doc(可选) -一个字符串,其中包含该属性的文档(docstring)。默认为None。
property() 从给定的getter,setter和deleter返回属性属性。
如果没有给出参数,property()将返回一个基本属性,该属性不包含getter,setter或Deleter。
如果未提供doc,property()则使用getter函数的docstring。
class Person: def __init__(self, name): self._name = name def get_name(self): print('获取名字:') return self._name def set_name(self, value): print('将名字设置为: ' + value) self._name = value def del_name(self): print('删除名字') del self._name # 设置属性使用get_name,set_name # 和 del_name 方法 name = property(get_name, set_name, del_name, 'Name property') p = Person('张三') print(p.name) p.name = '李四' del p.name
输出结果
获取名字: 张三 将名字设置为: 李四 删除名字
在此,_name用作存储Person名称的私有变量。
我们还设置:
get_name()是获取人名的获取方法,
用setter方法set_name()设置人名的方法,
del_name()方法用来删除人的名字。
现在,我们通过调用property()方法来设置一个新的属性名。
如程序所示,通过方法内部的打印输出,内部引用p.name调用get name()作为getter, set name()作为setter, del name()作为deleter
property()可以使用Python装饰器 @property来分配getter,setter和Deleter,而不是使用。
class Person: def __init__(self, name): self._name = name @property def name(self): print('获取名字:') return self._name @name.setter def name(self, value): print('设置名字为: ' + value) self._name = value @name.deleter def name(self): print('删除名字') del self._name p = Person('王麻子') print('名字为:', p.name) p.name = '李二' del p.name
输出结果
获取名字: 名字为: 王麻子 设置名字为: 李二 删除名字
在这里,property()我们没有使用,而是使用了@property装饰器。
首先,我们指定name()方法也是Person的属性。通过使用@property程序中所示的getter方法,可以完成此操作。
接下来,我们使用属性名称来指定设置器和删除器。
这是通过使用@name.settersetter方法和@name.deleterDeleter方法来完成的。
注意,我们使用了name()具有不同定义的相同方法来定义getter,setter和deleter。
现在,无论何时使用p.name,它都会在内部调用适当的getter,setter和Deleter,如方法内部显示的打印输出所示。