如何在__init__中调用属性设置器

10 投票
1 回答
2921 浏览
提问于 2025-04-15 16:39

我有一段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"这个值。

我知道这是因为密码是在类上定义的,而不是在实例上,但我不太确定该怎么正确表示它才能正常工作。任何帮助都很感激。

1 个回答

14

属性是一个描述符,而描述符只在新式类中有效。你可以试试:

class User(object): ...

而不是:

class User: ...

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

撰写回答