Python property

tags: python property
class Password(): def __init__(self): self._password = None def set_password(self, value): self._password = value def get_password(self): return self._password

上面是一個很簡單的類別,正常來說,在建置類別的時候我們會建置一個建構子,然後對各屬性做set、get的設置,然後實作類別的時候再各別透過set去做屬性賦值,再透過get去取值。

>>> from test_password import Password >>> p = Password() >>> p.set_password('testpass') >>> p.get_password() 'testpass'

但是這樣的步驟太繁雜了,追求優美的python不會原諒這種事情發生的。
也因此有了property這個函數的產生,透過property我們將上面的案例調整下!

class Password(): def __init__(self): self._password = None def set_password(self, value): self._password = value def get_password(self): return self._password # property(get, set, del) password = property(get_password, set_password)

直覺來說,property就是用來協助我們將諸多的get、set、del轉成一個屬性來操作,既然轉成屬性了,就簡單多了。

>>> p=Password >>> p=Password() >>> p.password=100 >>> p.password 100

上面案例可以看到,我們只針對password來操作,可以設定數值,也可以直接取得數值。
只是,這樣子對部份人來說還是不能滿足,他們希望可以用裝飾器來處理!

class Password(): def __init__(self): self._password = None @property def password(self): return self._password @password.setter def password(self, value): self._password = value