【发布时间】:2010-12-22 21:00:11
【问题描述】:
我有以下一段 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”的值。
我知道这是在类上定义密码而不是在实例上定义的密码,但我不确定如何正确表示它以便它工作。任何帮助将不胜感激。
【问题讨论】:
-
为什么会有
_password和password的实例? -
_password 是存储字段。密码是属性访问器。 _password 意味着一个私有字段。密码是公共协议。
标签: python setter init new-style-class