property() 构造返回属性属性。
用法:
property(fget=None, fset=None, fdel=None, doc=None)
参数:
property()
采用四个可选参数:
- fget(可选)- 获取属性值的函数。默认为
None
. - fset(可选)- 设置属性值的函数。默认为
None
. - fdel(可选)- 删除属性值的函数。默认为
None
. - 文档(可选)- 包含属性文档(文档字符串)的字符串。默认为
None
.
返回:
property()
从给定的 getter、setter 和 deleter 返回属性属性。
- 如果没有给出参数,
property()
返回一个不包含任何 getter、setter 或 deleter 的基本属性属性。 - 如果文档不提供,
property()
获取 getter 函数的文档字符串。
示例 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
这里,_name
用作存储Person
名称的私有变量。
我们还设置了:
- 获取人名的getter方法
get_name()
, - 设置人名的设置方法
set_name()
, - 删除方法
del_name()
删除人名。
现在,我们通过调用property()
方法设置一个新的属性属性name
。
如程序所示,引用p.name
在内部调用get_name()
作为getter,set_name()
作为setter,del_name()
作为deleter,通过方法内部的打印输出。
示例 2:使用 @property 装饰器
除了使用 property()
,您可以使用 Python decorator @property
来分配 getter、setter 和 deleter。
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
来完成的。
接下来,我们使用属性名来指定setter和deleter。
这是通过将@name.setter
用于setter 方法和@name.deleter
用于deleter 方法来完成的。
注意,我们使用了相同的方法name()
,但定义了不同的getter、setter和deleter。
现在,每当我们使用 p.name
时,它都会在内部调用适当的 getter、setter 和 deleter,如方法内部的打印输出所示。
相关用法
- Python property()用法及代码示例
- Python calendar prmonth()用法及代码示例
- Python calendar pryear()用法及代码示例
- Python print()用法及代码示例
- Python string printable()用法及代码示例
- Python pandas.arrays.IntervalArray.is_empty用法及代码示例
- Python pyspark.pandas.Series.dropna用法及代码示例
- Python pyspark.pandas.groupby.SeriesGroupBy.unique用法及代码示例
- Python pandas.DataFrame.ewm用法及代码示例
- Python pandas.api.types.is_timedelta64_ns_dtype用法及代码示例
- Python pandas.DataFrame.dot用法及代码示例
- Python pyspark.pandas.DataFrame.hist用法及代码示例
- Python pandas.DataFrame.apply用法及代码示例
- Python pyspark.pandas.Series.dt.weekday用法及代码示例
- Python pyspark.pandas.DataFrame.select_dtypes用法及代码示例
- Python pyspark.pandas.isnull用法及代码示例
- Python pyspark.pandas.Series.hasnans用法及代码示例
- Python pandas.DataFrame.combine_first用法及代码示例
- Python pyspark.pandas.Series.rmul用法及代码示例
- Python pyspark.sql.functions.grouping_id用法及代码示例
注:本文由纯净天空筛选整理自 Python property()。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。