如何从__init__调用属性设置器

时间:2009-12-03 15:27:04

标签: python setter init new-style-class

我有以下大块的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”的值。

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

1 个答案:

答案 0 :(得分:14)

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

class User(object): ...

而不是:

class User: ...

可以找到描述符的良好指南here