内置函数属性()有助于定义 Python 类属性。它为实例属性提供了一个接口,并提供了与 java 和 c#相同的属性。
**property(fget=None, fset=None, fdel=None, doc=None)** #where all arguments are optional
属性()参数:
接受四个可选参数。如果在没有任何参数的情况下调用property()
,它将返回一个基属性。
参数 | 描述 | 必需/可选 |
---|---|---|
FGD!FGD | 用于获取属性值的函数。默认为无。 | 可选择的 |
fset | 用于设置属性值的函数。默认为无。 | 可选择的 |
-贸易 | 用于删除属性值的函数。默认为无。 | 可选择的 |
文件 | 包含属性文档(docstring)的字符串。默认为无。 | 可选择的 |
属性()返回值
如果未提供参数 doc,则property()
将采用 getter 函数的 docstring。
| 投入 | 返回值 | | if 参数 | 属性属性 |
Python 中property()
方法的示例
示例 1:用 getter、setter 和 deleter 创建属性
class Person:
def __init__(self, name):
self._name = name
def get_name(self):
print('Getting name')
return self._name
def set_name(self, value):
print('Setting name to ' + value)
self._name = value
def del_name(self):
print('Deleting name')
del self._name
# Set property to use get_name, set_name
# and del_name methods
name = property(get_name, set_name, del_name, 'Name property')
p = Person('Adam')
print(p.name)
p.name = 'John'
del p.name
输出:
Getting name
The name is: Adam
Setting name to John
Deleting name
注意:现在我们通过调用property()
方法设置一个新的属性属性名。如程序中所示,通过方法内部的打印输出,引用 p.name 在内部调用property()
作为获取器,set_name()
作为设置器,set_name()
作为删除器。
示例 2:使用@property 装饰器
class Person:
def __init__(self, name):
self._name = name
@property
def name(self):
print('Getting name')
return self._name
@name.setter
def name(self, value):
print('Setting name to ' + value)
self._name = value
@name.deleter
def name(self):
print('Deleting name')
del self._name
p = Person('Adam')
print('The name is:', p.name)
p.name = 'John'
del p.name
输出:
Getting name
The name is: Adam
Setting name to John
Deleting name