property()構造返回property屬性。
property()的語法為:
property(fget=None, fset=None, fdel=None, doc=None)
推薦閱讀: Python @property:如何使用它以及為什么?
property()采用四個參數:
fget(可選) -用于獲取屬性值的函數。默認為None。
fset(可選) -用于設置屬性值的函數。默認為None。
fdel(可選) -用于刪除屬性值的函數。默認為None。
doc(可選) -一個字符串,其中包含該屬性的文檔(docstring)。默認為None。
property() 從給定的getter,setter和deleter返回屬性屬性。
如果沒有給出參數,property()將返回一個基本屬性,該屬性不包含getter,setter或Deleter。
如果未提供doc,property()則使用getter函數的docstring。
class Person: def __init__(self, name): self._name = name def get_name(self): print('獲取名字:') return self._name def set_name(self, value): print('將名字設置為: ' + value) self._name = value def del_name(self): print('刪除名字') del self._name # 設置屬性使用get_name,set_name # 和 del_name 方法 name = property(get_name, set_name, del_name, 'Name property') p = Person('張三') print(p.name) p.name = '李四' del p.name
輸出結果
獲取名字: 張三 將名字設置為: 李四 刪除名字
在此,_name用作存儲Person名稱的私有變量。
我們還設置:
get_name()是獲取人名的獲取方法,
用setter方法set_name()設置人名的方法,
del_name()方法用來刪除人的名字。
現在,我們通過調用property()方法來設置一個新的屬性名。
如程序所示,通過方法內部的打印輸出,內部引用p.name調用get name()作為getter, set name()作為setter, del name()作為deleter
property()可以使用Python裝飾器 @property來分配getter,setter和Deleter,而不是使用。
class Person: def __init__(self, name): self._name = name @property def name(self): print('獲取名字:') return self._name @name.setter def name(self, value): print('設置名字為: ' + value) self._name = value @name.deleter def name(self): print('刪除名字') del self._name p = Person('王麻子') print('名字為:', p.name) p.name = '李二' del p.name
輸出結果
獲取名字: 名字為: 王麻子 設置名字為: 李二 刪除名字
在這里,property()我們沒有使用,而是使用了@property裝飾器。
首先,我們指定name()方法也是Person的屬性。通過使用@property程序中所示的getter方法,可以完成此操作。
接下來,我們使用屬性名稱來指定設置器和刪除器。
這是通過使用@name.settersetter方法和@name.deleterDeleter方法來完成的。
注意,我們使用了name()具有不同定義的相同方法來定義getter,setter和deleter。
現在,無論何時使用p.name,它都會在內部調用適當的getter,setter和Deleter,如方法內部顯示的打印輸出所示。