Как мне вызвать установщик свойств из __init__ - PullRequest
10 голосов
/ 03 декабря 2009

У меня есть следующий кусок кода 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.

Я знаю, что это связано с тем, что в классе и экземпляре определяется пароль, но я не уверен, как правильно его представить, чтобы он работал. Любая помощь будет оценена.

1 Ответ

14 голосов
/ 03 декабря 2009

Свойство является дескриптором, и дескрипторы работают только с классами нового стиля. Попробуйте:

class User(object): ...

вместо:

class User: ...

Хорошее руководство по дескрипторам можно найти здесь .

...