📅  最后修改于: 2020-09-20 13:38:36             🧑  作者: Mango
property()
的语法为:
property(fget=None, fset=None, fdel=None, doc=None)
推荐读物: Python @property:如何使用它以及为什么?
property()
具有四个可选参数:
None
。 None
。 None
。 None
。 property()
从给定的getter,setter和deleter返回property属性。
property()
返回不包含任何getter,setter或deleter的基本属性属性。 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
在此, _name
用作存储Person
的名称的私有变量。
我们还设置:
get_name()
来获取人名, set_name()
来设置人的名字, del_name()
来删除人的名字。 现在,我们通过调用property()
方法来设置新的属性name
。
如程序中所示,通过方法内部显示的打印输出,在内部引用p.name
get_name()
称为getter,将set_name()
用作setter,将del_name()
用作del_name()
。
您可以使用Python装饰器@property
来分配getter,setter和deleter,而不是使用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
在这里,我们没有使用property()
,而是使用了@property
装饰器。
首先,我们指定name()
方法也是Person
的属性。通过在程序中显示的getter方法之前使用@property
来完成此操作。
接下来,我们使用属性名称来指定设置器和删除器。
这是通过使用@name.setter
用于setter方法)和@name.deleter
用于@name.deleter
方法)来完成的。
注意,我们使用相同的方法name()
和不同的定义来定义getter,setter和deleter。
现在,无论何时我们使用p.name
,它都会在内部调用适当的getter,setter和deleter,如方法内部显示的打印输出所示。