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