内置函数 property() 有助于定义 Python 类属性。它提供了一个实例属性接口,并提供了与 Java 和 C# 相同的属性。
property(fget=None, fset=None, fdel=None, doc=None) #where all arguments are optional
接受四个可选参数。如果 property() 在没有任何参数的情况下调用,则返回一个基本属性。
| 参数 | 描述 | 必需/可选 |
|---|---|---|
| fget | 获取属性值的函数。默认为 None。 | 可选 |
| fset | 设置属性值的函数。默认为 None。 | 可选 |
| fdel | 删除属性值的函数。默认为 None。 | 可选 |
| doc | 一个字符串,包含属性的文档(docstring)。默认为 None。 | 可选 |
如果未提供参数 doc,则 property() 使用 getter 函数的 docstring。
| 输入 | 返回值 |
|---|---|
| 如果参数 | 属性 |
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() 方法设置了一个新的属性名称。如程序所示,通过内部调用 get_name() 作为 getter、set_name() 作为 setter 和 del_name() 作为 deleter,并通过方法内打印的输出来引用 p.name。
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