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()。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。
