Как мне вызвать установщик свойств из __init__
-
12-09-2019 - |
Вопрос
У меня есть следующий фрагмент кода 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" считывается оператором print.
Я знаю, что это связано с тем, что пароль определяется в классе по сравнению с экземпляром, но я не уверен, как правильно его представить, чтобы он работал.Будем признательны за любую помощь.
Решение
Свойство - это дескриптор, а дескрипторы работают только с классами нового стиля.Попробуй:
class User(object): ...
вместо того, чтобы:
class User: ...
Можно найти хорошее руководство по дескрипторам здесь.
Не связан с StackOverflow