property是Python類中的一個非常實用的語法,其主要用于將一些原本需要通過復(fù)雜計算而不是直接保存為屬性的結(jié)果值,變得像屬性一樣可以直接訪問,而不是表現(xiàn)為一個函數(shù)調(diào)用来惧;同時,還用于將一些原本需要通過調(diào)用函數(shù)進行一系列復(fù)雜操作才能夠設(shè)定完成的值摹迷,變得像普通屬性一樣可以用賦值號進行直接設(shè)定,從而隱藏許多在外部調(diào)用時程序內(nèi)部的細節(jié)辱士。
property由property泪掀、setter听绳、deleter三個裝飾器構(gòu)成颂碘,其中deleter用于析構(gòu),本文不做詳細討論椅挣。
下例通過一個簡單的坐標類來討論這兩個裝飾器:
class Coord:
???def __init__(self, x, y):
???????self.x = x
???????self.y = y
???@property
???def coord(self):
???????return (self.x, self.y)
??? @coord.setter
???def coord(self, coordTuple):
???????self.x, self.y = coordTuple
coord = Coord(3, 4)
print(coord.coord)
coord.coord = (1, 2)
print(coord.coord)
上述代碼定義了一個坐標類头岔。其通過@property裝飾器定義了兩個方法,其中鼠证,如果需要使得一個函數(shù)調(diào)用變得像是屬性訪問峡竣,則首先需要定義一個用@property裝飾的方法,此方法的方法名就是外部訪問時的屬性名量九;其次适掰,如果還要對當(dāng)前的property裝飾器定義的屬性進行修改操作,則使用名為“方法名.setter”的裝飾器荠列,再定義一個同名方法类浪,這個方法接受兩個參數(shù),其第二參數(shù)就是外部賦值時的等號右值肌似。
2018年6月于蘇州