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()。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。