10

私は次のPythonコードのチャンクを持っています:

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」に設定されます。次に、「password1」の値がprintステートメントによって読み取られます。

これは、インスタンスではなくクラスで定義されているパスワードに起因することはわかっていますが、正しく表現する方法がわからないため、機能します。どんな助けでもいただければ幸いです。

4

1 に答える 1

14

プロパティは記述子であり、記述子は新しいスタイルのクラスでのみ機能します。試す:

class User(object): ...

それ以外の:

class User: ...

記述子の優れたガイドはここにあります。

于 2009-12-03T15:37:25.633 に答える