2009-12-03 18 views
10

からプロパティのセッターを呼び出します。しかし、コンストラクタからself.passwordを設定すると無視し、どのように私は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をプリントアウトする必要があります値を "password1"に設定するだけです。 「password1」の値は、print文によって読み取られます。

これは、クラスとインスタンスの間にパスワードが定義されていることを知っていますが、正しく表現する方法がわかりません。どんな助けもありがとう。

+0

なぜインスタンスが '_password'と' password'ですか? –

+0

_passwordはストレージフィールドです。パスワードはプロパティアクセサーです。 _passwordはプライベートフィールドを意味します。パスワードはパブリックプロトコルです。 –

答えて

14

プロパティはディスクリプタであり、ディスクリプタは新しいスタイルのクラスでのみ機能します。試してみてください:

class User(object): ... 

の代わり:

class User: ... 

をディスクリプタに良いガイドがhereを見つけることができます。

+0

ありがとう - 完璧に働いた! –

+2

Python 2.xを使用している必要があります。 Python 3では、すべてのクラスはデフォルトでは新しいスタイルです。 – AFoglia

+0

それは正しい - 2.6.4 –

関連する問題