2009-12-03 63 views
10

屬性setter我有Python代碼以下塊:如何調用從__init__

import hashlib 

class User: 
    def _set_password(self, value): 
     self._password = hashlib.sha1(value).hexdigest() 

    def _get_password(self): 
     return self._password 

    password = property(
     fset = _set_password, 
     fget = _get_password) 

    def __init__(self, user_name, password): 
     self.password = password 

u = User("bob", "password1") 
print(u.password) 

這在理論上應打印出密碼的SHA1,但是設置self.password從構造忽略定義屬性,並將值設置爲「password1」。然後由print語句讀取「password1」的值。

我知道這是密碼被定義在類與實例上的東西,但我不知道如何正確表示它,所以它的工作原理。任何幫助,將不勝感激。

+0

爲什麼你有'_password'和'password'的實例? – 2009-12-03 15:34:56

+0

_password是存儲字段。密碼是屬性訪問器。 _密碼意味着一個私人領域。密碼是公共協議。 – 2009-12-03 15:36:36

回答

14

屬性是一個描述符,描述符只適用於新樣式的類。嘗試:

class User(object): ... 

代替:

class User: ... 

一個很好的指南,描述符可以發現here

+0

謝謝 - 完美的工作! – 2009-12-03 15:42:54

+2

您必須使用Python 2.x.在Python 3中,所有類都是默認的新風格。 – AFoglia 2009-12-03 18:02:29

+0

這是正確的 - 2.6.4 – 2009-12-03 21:07:07