python - 我如何从 __init__ 调用属性 setter

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

我知道这与在类和实例上定义的密码有关,但我不确定如何正确表示它才能正常工作。任何帮助将不胜感激。

最佳答案

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

class User(object): ...

代替:

class User: ...

可以找到一个很好的描述符指南 here .

关于python - 我如何从 __init__ 调用属性 setter ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1840628/

相关文章:

python - 在 GAE 的 Python 动态属性中存储一个空列表?

python - TensorFlow:优化推断 Estimator 导出的 SavedModel

python - 如何在 Python 中管理对可变属性的访问

iPhone 使用附加数据初始化 UIViewController

swift - 如何在 Swift 扩展中重新定义默认类 init() ?

Python BeautifulSoup 和请求网络抓取

python - 如何在python pptx中设置背景图片

python - 如何在 Python 中创建没有 getter 的 setter?

c++ - 更改 vector 中对象的私有(private)变量

node.js - 错误 : ENOENT, 统计 'C:\Users\Ali\AppData\Roaming\npm'