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”。然后 print 语句读取“password1”的值。

我知道这是在类上定义密码而不是在实例上定义的密码,但我不确定如何正确表示它以便它工作。任何帮助,将不胜感激。

4

1 回答 1

14

属性是一个描述符,而描述符仅适用于新式类。尝试:

class User(object): ...

代替:

class User: ...

一个很好的描述符指南可以在这里找到。

于 2009-12-03T15:37:25.633 回答